WinForms 工具提示未显示

问题描述 投票:0回答:5

我有一个 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 手动显示它,但它永远不会消失!

c# winforms user-controls tooltip
5个回答
4
投票

当我的工具提示没有显示在 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)

这样我的工具提示总是会在预期的时间地点出现。 祝你好运!


3
投票

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

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

您还可以通过

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


1
投票

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

它的设计目的是放入您开始使用的表单或控件中,但也可以将其转换为需要“parent”参数的静态方法。

/// <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
实例来管理父子控件工具提示,则该行为是未定义的。


0
投票

我的问题(标签页上的控件不显示工具提示)使用下面的代码

 ToolTip toolTip = new ToolTip();
 toolTip.SetToolTip(Control1OnTabPage1, Control1Text)
 toolTip.SetToolTip(Control2OnTabPage2, Control2Text)

是由 TabPage1 上设置的工具提示引起的,后来被删除。这似乎删除了所有工具提示,而不仅仅是 TabPage1 上的工具提示。确保在稍后删除的页面上没有设置工具提示可以解决问题。


-1
投票

参见 ToolTip 类的示例

我也遇到了这个问题,可以按如下方式解决:

// 无论表单是否处于活动状态,都强制显示工具提示文本。

toolTip1.ShowAlways = true;

© www.soinside.com 2019 - 2024. All rights reserved.