我有一个继承自UserControl类的自定义控件。它有一个ToolTip属性,但我需要在鼠标拖过它时显示它。
Tooltip.Show方法需要第二个类型为Control的参数。我不知道该怎么做。
任何想法/帮助表示感谢。
答案 0 :(得分:1)
SetToolTip()仅需要调用一次
class Foo : Form {
ToolTip tooltip = new ToolTip();
public Foo(){
tooltip.SetToolTip(this, "This is a tooltip!");
foreach(Control ctrl in this.Controls) {
tooltip.SetToolTip(ctrl, "This is a tooltip!");
}
}
}
答案 1 :(得分:0)
在构造函数中实例化工具提示并在鼠标悬停事件中显示它。
取自Joseph在stackoverflow中的回答
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);
}
希望它有所帮助。
答案 2 :(得分: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)将工具提示放在usercontrol所在的位置。
否则,有时,它可能导致工具提示显示在屏幕上的随机位置。 希望这有助于某人! :)
答案 3 :(得分: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时,它将被调用而不是原始。
新方法执行一个简单的递归调用,为所有子控件提供与父控件相同的工具提示。
此代码假定在调用SetToolTip后,UserControl不会向其添加其他控件。