8

我要求不自动隐藏标准的 .NET Windows 窗体工具提示 - 也就是说,我需要它们保持可见,直到鼠标移出具有工具提示的控件。我想避免为所有带有工具提示的控件使用特定的 MouseEnter 和 MouseLeave 事件。如果他们能解决问题,我很高兴听到有关第三方解决方案的信息。

4

10 回答 10

13

由于它已经发布了无数次并且从 .NET Framework 早期就知道,因此您不能将 AutoPopDelay 时间设置为高于 Int16.MaxValue(即 32767)并使其正常工作。使用工具提示 Show() 方法会导致相同的结果。任何高于 32767 的值都会导致计时器重置为 5000 毫秒。

即使尝试将 AutomaticDelay 设置为导致 AutoPopDelay 值高于 32767 的值也会导致工具提示不起作用。此外,使用 StopTimer() 方法不会产生任何积极的结果。

我成功显示具有无限超时的工具提示的唯一方法是使用传递显示位置的工具提示 Show() 方法。tooltip.Show(text, control, position). 总之,工具提示控件具有我在控件中遇到的最奇怪的行为,有关设置延迟时间的文档非常具有误导性。

于 2012-04-13T14:59:07.243 回答
11

我正在寻找解决问题的方法

  1. 弹出气球消失得太快,让我无法阅读其内容
  2. 悬停在该区域时,弹出气球不会再次出现。

我在论坛中找到了以下答案,它不能解决问题 2,但是当我将其值设置为32766时,我阅读文本的时间超过了我需要的时间,因此 - 在我看来 - 一种“解决方法” :

实际上,我发现我的问题是我分配了一个高于 32767 的值(32768 和更高的值会产生 5 秒的效果)真的很奇怪,因为 AutoPopDelay 应该以整数(32 位)作为参数,而 32767 真的有符号的 16 位 ...

但我不得不承认,它仍然很糟糕......

但将其设置为32000(32 秒)似乎效果更好。不知道为什么会这样,但也许它可以帮助某人。

于 2010-06-24T08:02:48.663 回答
3

在我的应用程序中,工具提示文本必须每 10 秒更新一次。对我有用的是每次更新此文本时停用和激活工具提示。当我将 AutoPopDelay 设置为超过 10 秒时,工具提示将有效地永久保留。因此,您可以使用计时器来重复激活和停用工具提示:

private void timer1_Tick(object sender, EventArgs e)
{
    toolTip1.Active = false;
    toolTip1.Active = true;
}

要最小化重新激活工具提示时发生的闪烁,请将 InitialDelay 设置为 1。当您将 AutoPopDelay 设置为 30000 并将计时器间隔也设置为 30000 时,您将看到每 30 秒仅一次的非常短的闪烁。对于我的应用程序,这种短暂的闪烁是可以接受的。顺便说一句,别忘了打开定时器!(起初我以为它不起作用,直到我发现我忘了打开定时器;-))

当然,这是治疗症状的方法,而不是解决问题的优雅方法。

于 2012-02-29T09:49:01.760 回答
2

试试myToolTip.ReshowDelay = 0

您只需在延迟到期后立即重新显示工具提示。它对我有用。

于 2009-12-21T10:47:30.560 回答
1

我认为您正在尝试治愈症状,而不是解决问题的原因。

您正试图强制工具提示与工具提示不同。根据定义,工具提示是“一个小的“悬停框”,其中包含有关被悬停的项目的信息”。

如果用户无法在 30 秒内阅读工具提示试图建议的内容,那么它并不是真正的“提示”,而是帮助文件中的一整章。将冗长的说明放入手册中,不要试图将其强制放入永远保持打开状态的工具提示中。

于 2010-10-04T16:07:01.033 回答
1

这不会是你想听到的答案......自己动手吧。我曾经有一个场景,我想模拟新 Office 的功能区工具提示行为以用于快捷键命令,我发现标准工具提示 API 太有限了。

为您需要工具提示的每个控件创建一个小而简单且无边框的表单实例。然后在执行 mouse-enter 或 -leave 事件时以非模态方式显示和隐藏它们。让此窗口的构造函数接收 UI 控件实例并让它查询控件的事件,以便它可以将自己附加到鼠标进入和离开事件,这样您就不必手动连接它们。

于 2009-04-30T10:32:55.450 回答
1

所以,我最终停用了工具提示,但我仍然使用它来保存工具提示的文本,因为它巧妙地将自身添加到所有控件中。我为工具提示制作了自己的面板和标签,并在所有控件的鼠标输入和鼠标离开事件上动态定位、显示和填充文本。

我还编写了一个递归函数来将鼠标事件添加到每个标签控件(我唯一有工具提示的),所以我不必手动添加它,也不必记住添加新的标签。该项目的新开发人员可能从未意识到工具提示控件实际上并未呈现提示。

为什么要在面板中添加标签?- 非常大的工具提示可以滚动 - 尽管这仍然不能很好地工作。

这不是真的很漂亮,如果你继续的话,我仍然在寻找一个好的答案(或对我所采用的方法的批评)。

我遇到了http://www.binarymission.co.uk/,但他们的工具提示似乎没有在我的 .NET 3.5 应用程序中正确呈现。我还在和他们说话。

于 2009-05-05T05:36:53.980 回答
1

在我有限的经验中,我发现将 showAlways 属性设置为 true 具有使提示“无限”显示的副作用(直到光标退出控件)。这不是文档所说的那样,但这就是我所经历的。(但是,我使用的是 Janus Supertip 组件,这可能会影响行为)。

于 2011-12-01T15:17:39.633 回答
-1

Set the ToolTipService.ShowDuration attached property to int.MaxValue:

<Button 
  Height="23" Width="75"
  Content="Click Me" 
  ToolTip="My ToolTip" ToolTipService.ShowDuration="2147483647" 
/>
于 2009-04-30T07:04:02.177 回答
-1

ToolTip.StopTimer方法可能会有所帮助。来自 MSDN:

ToolTip 类有一个内部计时器,用于设置 ToolTips 的显示持续时间。与此计时器关联的持续时间通过 AutoPopDelay 属性设置。StopTimer 方法将停止此内部计时器,导致任何显示的 ToolTip 以模态方式显示,直到调用 Hide 方法,或者父窗体被最小化、隐藏或关闭。

于 2009-04-30T08:12:44.367 回答