2012-12-03 70 views

回答

0

在構造函數中實例化您的工具提示並在鼠標懸停事件中顯示它。

約瑟的回答攝於計算器

public ToolTip tT { get; set; } 

public ClassConstructor() 
{ 
tT = new ToolTip(); 
} 

private void MyControl_MouseHover(object sender, EventArgs e) 
{ 
tT.Show("Why So Many Times?", this); 
} 

希望它能幫助。

+0

已經嘗試過。它給了我一個NullReferenceException在System.Windows.Forms.ToolTip。IsWindowActive(IWin32Window窗口) – Manish

+0

爲此,您必須將鼠標懸停在用戶控件的「空白」畫布上,而不是用戶控件一部分的子控件。也許這就是你得到IsWindowActive異常的原因。 –

0

我自己需要這個,發現上面提供的部分解決方案可以改進。

基本上,您需要將所有適用的子控件的MouseHover事件設置爲父UserControl的MouseHover。

這可以用代碼爲下文的MyUserControl類的構造函數來完成:

class MyUserControl:UserControl 
{ 
    string strTooltip; 
    public ToolTip toolTip 
    { 
    get; 
    set; 
    } 

    public MyUserControl() 
    { 
    toolTip = new ToolTip(); 
    foreach(Control ctrl in this.Controls) 
    { 
     ctrl.MouseHover += new EventHandler(MyUserControl_MouseHover); 
     ctrl.MouseLeave += new EventHandler(MyUserControl_MouseLeave); 
    } 
    } 
    void MyUserControl_MouseLeave(object sender, EventArgs e) 
    { 
    toolTip.Hide(this); 
    } 

    void MyUserControl_MouseHover(object sender, EventArgs e) 
    { 
    toolTip.Show(strToolTip, this, PointToClient(MousePosition)); 
    } 
} 

注意,我們使用的是PointToClient(MousePosition)定位在用戶控件所在的提示。

否則,有時會導致工具提示顯示在屏幕上的隨機位置。 希望這可以幫助別人! :)

0

今天我自己打這個問題,並提出了這個相當簡單的解決方案。

以下源文件添加到您的代碼庫的地方(我把它放在一個文件ToolTipEx.cs)

namespace System.Windows.Forms 
{ 
    public static class ToolTipEx 
    { 
     private static void SetTipRecurse(ToolTip toolTip, Control control, string tip) 
     { 
      toolTip.SetToolTip(control, tip); 

      foreach (Control child in control.Controls) 
       SetTipRecurse(toolTip, child, tip); 
     } 

     public static void SetTooltip(this ToolTip toolTip, UserControl control, string tip) 
     { 
      SetTipRecurse(toolTip, control, tip); 
     } 
    } 
} 

如果是在另一個DLL,確保DLL被引用。

然後你所要做的就是對toolTip.SetToolTip(myControl, "some tip");進行正常調用,編譯器會爲你解決其餘的問題。

因爲函數基本上延伸所述ToolTip.SetToolTip()方法將一個具有簽名

ToolTip(UserControl control, string tip); 

這是在當我們正在處理的層次結構比原來

ToolTip(Control control, string tip); 

越往上一個UserControl,它將被調用而不是原來的。

新方法執行一個簡單的遞歸調用,爲所有子控件提供與父控件相同的工具提示。

此代碼假定UserControl在調用SetToolTip之後不會添加其他控件。

+0

這顯示瞭如此之多的承諾,直到我將'ToolTip.isBalloon'屬性更改爲true ...由於某種原因,這只是簡單地將它全部停止工作? – MaxOvrdrv

相關問題