当您将鼠标悬停在ToolStripItems上时,即使它们所在的窗体不在焦点中,它们也会显示活动突出显示。但是,除非窗体被聚焦,否则它们不会显示工具提示。我看过ToolStrip 'click-though' hack了。有人知道如何让ToolStripButton在其父窗体未处于焦点时显示其工具提示吗?
谢谢!
发布于 2008-10-04 13:35:17
问题是,像ToolStripButton或ToolStripDropDownButton这样的ToolStrip“控件”不是从控件继承而来的。现在,我解决了这个问题,只要用户将鼠标悬停在按钮上,就将焦点放在ToolStrip上。按钮的MouseHover事件触发得太晚了--在"show tooltip“代码运行之后,所以我扩展了ToolStripDropDownButton类并使用了我的新按钮。此方法应该适用于从ToolStripItem继承的任何其他类似按钮的类
public class ToolStripDropDownEx : ToolStripDropDownButton
{
public ToolStripDropDownEx(string text)
{
}
protected override void OnMouseHover(EventArgs e)
{
if (this.Parent != null)
Parent.Focus();
base.OnMouseHover(e);
}
}发布于 2008-09-28 08:29:15
也许这段代码中的两种方法中的一种会让你在正确的方向上起步……
public Form1()
{
InitializeComponent();
tooltip = new ToolTip();
tooltip.ShowAlways = true;
}
private ToolTip tooltip;
private void toolStripButton_MouseHover(object sender, EventArgs e)
{
if (!this.Focused)
{
ToolStripItem tsi = (ToolStripItem)sender;
tooltip.SetToolTip(toolStrip1, tsi.AutoToolTip ? tsi.ToolTipText : tsi.Text);
/*tooltip.Show(tsi.AutoToolTip ? tsi.ToolTipText : tsi.Text, this,
new Point(toolStrip1.Left, toolStrip1.Bottom));*/
}
}
private void toolStripButton_MouseLeave(object sender, EventArgs e)
{
tooltip.RemoveAll();
}第一个问题是你不能直接将它设置到按钮上,它不是从Control继承的,并且工具提示不会显示,除非你在栏上而不是在按钮上。
第二种方法(注释掉)的问题是它根本不显示。不太清楚为什么,但也许你可以调试出来。
发布于 2012-01-20 05:07:13
我尝试了一些方法,发现这是最简单的
当我创建toolstripbutton项时,我向它的hover事件添加了一个事件处理程序:
private sub SomeCodeSnippet()
Me.tooltipMain.ShowAlways = True
Dim tsi As New ToolStripButton(String.Empty, myImage)
tsi.ToolTipText = "my tool tip text"
toolstripMain.Add(tsi)
AddHandler tsi.MouseHover, AddressOf ToolStripItem_MouseHover
end sub然后事件处理程序:
Private Sub ToolStripItem_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs)
If TypeOf sender Is ToolStripButton Then
Me.tooltipMain.SetToolTip(Me.toolstripMain, CType(sender, ToolStripButton).ToolTipText)
End If
End Sub这真的很好用,尽管当您第一次将鼠标悬停在工具条上时,我确实注意到了一个很小的初始延迟
https://stackoverflow.com/questions/143058
复制相似问题