我有一個從UserControl類繼承的自定義控件。它有一個ToolTip屬性,但是當鼠標拖過它時需要顯示它。以編程方式在從UserControl繼承的控件上顯示工具提示
Tooltip.Show方法需要Control類型的第二個參數。我不知道如何使用它。
任何想法/幫助表示讚賞。
我有一個從UserControl類繼承的自定義控件。它有一個ToolTip屬性,但是當鼠標拖過它時需要顯示它。以編程方式在從UserControl繼承的控件上顯示工具提示
Tooltip.Show方法需要Control類型的第二個參數。我不知道如何使用它。
任何想法/幫助表示讚賞。
在構造函數中實例化您的工具提示並在鼠標懸停事件中顯示它。
約瑟的回答攝於計算器
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);
}
希望它能幫助。
我自己需要這個,發現上面提供的部分解決方案可以改進。
基本上,您需要將所有適用的子控件的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)定位在用戶控件所在的提示。
否則,有時會導致工具提示顯示在屏幕上的隨機位置。 希望這可以幫助別人! :)
今天我自己打這個問題,並提出了這個相當簡單的解決方案。
以下源文件添加到您的代碼庫的地方(我把它放在一個文件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之後不會添加其他控件。
這顯示瞭如此之多的承諾,直到我將'ToolTip.isBalloon'屬性更改爲true ...由於某種原因,這只是簡單地將它全部停止工作? – MaxOvrdrv
已經嘗試過。它給了我一個NullReferenceException在System.Windows.Forms.ToolTip。IsWindowActive(IWin32Window窗口) – Manish
爲此,您必須將鼠標懸停在用戶控件的「空白」畫布上,而不是用戶控件一部分的子控件。也許這就是你得到IsWindowActive異常的原因。 –