首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非焦点ToolStripItem上显示工具提示

在非焦点ToolStripItem上显示工具提示
EN

Stack Overflow用户
提问于 2008-09-27 05:22:13
回答 4查看 8.5K关注 0票数 8

当您将鼠标悬停在ToolStripItems上时,即使它们所在的窗体不在焦点中,它们也会显示活动突出显示。但是,除非窗体被聚焦,否则它们不会显示工具提示。我看过ToolStrip 'click-though' hack了。有人知道如何让ToolStripButton在其父窗体未处于焦点时显示其工具提示吗?

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2008-10-04 13:35:17

问题是,像ToolStripButton或ToolStripDropDownButton这样的ToolStrip“控件”不是从控件继承而来的。现在,我解决了这个问题,只要用户将鼠标悬停在按钮上,就将焦点放在ToolStrip上。按钮的MouseHover事件触发得太晚了--在"show tooltip“代码运行之后,所以我扩展了ToolStripDropDownButton类并使用了我的新按钮。此方法应该适用于从ToolStripItem继承的任何其他类似按钮的类

代码语言:javascript
复制
public class ToolStripDropDownEx : ToolStripDropDownButton
{
    public ToolStripDropDownEx(string text)
    {
    }

    protected override void OnMouseHover(EventArgs e)
    {
        if (this.Parent != null)
            Parent.Focus();
        base.OnMouseHover(e);
    } 
}
票数 6
EN

Stack Overflow用户

发布于 2008-09-28 08:29:15

也许这段代码中的两种方法中的一种会让你在正确的方向上起步……

代码语言:javascript
复制
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继承的,并且工具提示不会显示,除非你在栏上而不是在按钮上。

第二种方法(注释掉)的问题是它根本不显示。不太清楚为什么,但也许你可以调试出来。

票数 3
EN

Stack Overflow用户

发布于 2012-01-20 05:07:13

我尝试了一些方法,发现这是最简单的

当我创建toolstripbutton项时,我向它的hover事件添加了一个事件处理程序:

代码语言:javascript
复制
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

然后事件处理程序:

代码语言:javascript
复制
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

这真的很好用,尽管当您第一次将鼠标悬停在工具条上时,我确实注意到了一个很小的初始延迟

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/143058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档