禁用按钮上的工具提示
问题描述:
我之前发布了这个问题,有人将其标记为DUPLICATE。但是当我问他关于那个应该有答案的帖子时,他没有任何适当的解释。所以请在标记或投票前仔细阅读这个问题。禁用按钮上的工具提示
我的问题是关于在DISABLED按钮上显示工具提示。
this.btnMy.Enabled = false;
我有一个按钮,它放置在一个面板里面,并带有与其相关的工具提示。现在,当按钮被启用时,它都可以正常工作。
但是,如果按钮是已禁用,则工具提示不起作用。这似乎是标准的行为。
现在我想要显示的按钮时,工具提示已禁用太。所以我做了以下事情。
private ToolTip m_tooltip = new ToolTip();
private bool toolTipShown = false;
private button btnMy;
m_tooltip.InitialDelay = 0;
m_tooltip.ShowAlways = true;
private void myForm_MouseMove(object sender, MouseEventArgs e)
{
if (this.btnMy == FindControlAtCursor(this))
{
if (!toolTipShown)
{
m_tooltip.Show("MyToolTip", this.btnMy, e.Location);
toolTipShown = true;
}
}
else
{
m_tooltip.Hide(this.btnGiven);
toolTipShown = false;
}
}
由于按钮是面板的内部,我不得不使用其他几个功能找到确切按钮控制当鼠标在它。
public static Control FindControlAtPoint(Control container, Point pos)
{
Control child;
foreach (Control c in container.Controls)
{
if (c.Visible && c.Bounds.Contains(pos))
{
child = FindControlAtPoint(c, new Point(pos.X - c.Left, pos.Y - c.Top));
if (child == null) return c;
else return child;
}
}
return null;
}
public static Control FindControlAtCursor(Form form)
{
Point pos = Cursor.Position;
if (form.Bounds.Contains(pos))
return FindControlAtPoint(form, form.PointToClient(Cursor.Position));
return null;
}
现在,当我调试,我可以看到代码找到正确的按钮,并尝试调用ToolTip.Show,但由于某种原因,它没有得到显示。
在调试时,我看到一个小的工具提示弹出。在发布模式下其他方面,没有任何显示。
任何想法?
答
我不会去争论它是否是重复的(虽然HABO在评论中指出它看起来非常类似于How can I show a tooltip on a disabled button?)。另外我不打算讨论整个代码。
的主要问题是在这条线
m_tooltip.Show("MyToolTip", this.btnMy, e.Location);
的documentation为ToolTip.Show
过载所使用状态的point
参数
甲点包含的偏移量,以像素为单位,相对于在相关控制窗口的左上角显示工具提示。
当你传递一个点相对于窗体。
为了解决这个问题,你应该使用这样的事情
var pos = this.btnMy.PointToClient(this.PointToScreen(e.Location));
m_tooltip.Show("MyToolTip", this.btnMy, pos);
答
MouseMove事件将不触发当鼠标移动到子控件或面板,所以你好得多使用定时器来代替:
private void timer1_Tick(object sender, EventArgs e) {
Control c = FindControlAtPoint(this, this.PointToClient(Control.MousePosition));
if (c != null) {
Point p = c.PointToClient(Control.MousePosition);
p.Offset(10, 10);
m_tooltip.Show("Found " + c.Name, c, p);
m_tooltip.Active = true;
} else {
m_tooltip.Active = false;
}
}
右侧顶部_Related_问题是[此](http://*.com/questions/491267/how-can-i-show-a-tooltip-on-a-disabled-按钮?RQ = 1)。这个问题的答案不适用吗? – HABO