WinForms工具提示没有显示

时间:2014-11-28 16:15:25

标签: c# winforms user-controls tooltip

我有一个WinForms应用程序。每个表单和用户控件都按如下方式设置其工具提示:

// in the control constructor
var toolTip = new ToolTip();
this.Disposed += (o, e) => toolTip.Dispose();
toolTip.SetToolTip(this.someButton, "...");
toolTip.SetToolTip(this.someCheckBox, "...");
...

但是,当我将鼠标悬停在控件上时,工具提示不会显示。这是使用工具提示的合适方式吗?应用程序的另一部分(例如,听一些事件)是否会发生某些事情,这会阻止工具提示工作?

请注意,我的外部表单的工具条按钮(通过按钮的工具提示属性配置)上的工具提示可以按预期工作。

编辑:

我已经观察到了这一点,我注意到有时工具提示确实出现了,它只是非常“片状”。基本上,有时当我将鼠标移到控件上时,它会非常短暂地显示出来然后闪烁。我可以用.Show()和一个很长的AutoPopDelay手动显示它,但它永远不会消失!

3 个答案:

答案 0 :(得分:2)

您的代码对我来说似乎没问题。我的代码中找不到任何错误。但是,只有在禁用控制时才会失败。顺便说一句,你可以试试这样的另一种方法。但是,我不建议你像这样展示工具提示。

private void someButton_MouseEnter(...)
{
    toolTip.Show("Tooltip text goes here", (Button)sender);
}

您还可以在.Show()方法中指定应显示工具提示的位置。你可以使用一些重载函数。有关ToolTip.Show()方法的详细信息,请阅读msdn

答案 1 :(得分:1)

当我的工具提示没有出现在RichTextBox上时,我遇到了类似的问题,通常应该是3-5倍。即使强制它使用 toolTip.Show 显式显示也无济于事。在我改变Shell提到的方式之前 - 你必须告诉哪里你希望你的工具提示出现:

'Dim pnt As Point
pnt = control.PointToClient(Cursor.Position)
pnt.X += 10 ' Give a little offset
pnt.Y += 10 ' so tooltip will look neat
toolTip.Show(text, control, pnt)

这样,我的工具提示始终会出现 。 祝你好运!

答案 2 :(得分:0)

我编写了以下方法,将“工具提示”从父控件(具有工具提示集)“传播”到其子控件(除非它们具有自己的替代工具提示)。

旨在将其放入您开始使用的表单或控件中,但也可以将其转换为需要“父”参数的静态方法。

/// <summary>Setting a toolTip on a custom control unfortunately doesn't set it on child
/// controls within its drawing area. This is a workaround for that.</summary>
private void PropagateToolTips(Control parent = null)
{
    parent = parent ?? this;
    string toolTip = toolTip1.GetToolTip(parent);
    if (toolTip == "")
        toolTip = null;
    foreach (Control child in parent.Controls)
    {
        // If the parent has a toolTip, and the child control does not
        // have its own toolTip set - set it to match the parent toolTip.
        if (toolTip != null && String.IsNullOrEmpty(toolTip1.GetToolTip(child)))
            toolTip1.SetToolTip(child, toolTip);
        // Recurse on the child control
        PropagateToolTips(child);
    }
}

请注意,如果您使用多个ToolTip实例来管理父级和子级控制工具提示,则行为是不确定的。