3

我正在.Net WinForms 中编写一个日历控件,它将显示每个日期的工具提示。

确定何时显示工具提示的最佳方法是什么?

立即显示它MouseMove会妨碍它,所以我希望它显示鼠标悬停在每个日期单元格上的时间。

MouseHover事件仅在 之后的第一次悬停时触发MouseEnter,因此我无法使用它。

最好的方法是什么?

编辑:我正在使用 WinForms

4

3 回答 3

6

Enter 和 Hover 之间的时间延迟在SystemInformation.MouseHoverTime中指定。

如果由于某种原因,您使用的任何 UI 框架的内置工具提示处理代码都不够用,您可以在每次 MouseMove 之后启动一个 Timer 并在它触发时显示一个 Tooltip。显然,每次移动鼠标时都需要重置计时器,以防止出现一系列“工具提示雨”。

于 2009-06-29T03:49:18.143 回答
0

查看 ToolTip 类的 AutoPopDelay、InitialDelay 和 ReshowDelay 属性,因为它们控制工具提示的行为。

我通常会玩弄这些价值观,直到我得到“感觉”正确的东西。当工具提示立即显示时很烦人,对于简短的工具提示,当它们过早消失时也很烦人。对于非常长的工具提示,比如说,几个段落(是的,糟糕的设计决策,但如果有很多信息要阅读,至少让我阅读它!)那么只要我的鼠标静止,它就应该保持打开状态。

来自 MSDN的工具提示示例提供了以下值:

 AutoPopDelay = 5000;
 InitialDelay = 1000;
 ReshowDelay = 500;
 // Force the ToolTip text to be displayed whether or not the form is active.
 ShowAlways = true;

如评论中所述,发布者希望以编程方式触发工具提示。为此,需要调用 ToolTip.Show()。要获得延迟效果,您可能需要运行一个计时器来计算鼠标静止的时间。每当鼠标进入、离开或在控件内移动时,这个时间都应该被重置。

于 2009-06-29T03:45:14.873 回答
0

了解您使用的是哪种技术(ASP.NET?Forms?WPF?)会很有帮助,因为它们都有不同的实现工具提示的方式:

  • 使用 ASP.NET,您可以简单地设置控件的 ToolTip 属性(例如在日历中显示数字的 Label 控件),当鼠标悬停在控件上时,它会在稍有延迟后自动显示工具提示。
  • 在 Forms 中,我认为您必须实际创建一个 ToolTip 对象,然后将控件附加到它上面。
  • 在 WPF 中,可以将 Label.ToolTip 元素添加到 XAML 代码中。

但是,在所有情况下,都有一种内置的方法可以做到这一点,因此您可能根本不需要编写自己的代码。

如果您的情况如此定制以至于您确实需要编写自己的代码,那么我真的需要更多地了解您如何表示日历中的数字以帮助您。

最后一件事:你并没有真正问过这个问题——它可能不在你的控制之下——但你可能想问自己,工具提示是否是首先显示日历信息的最佳方式。如果空间真的很紧,那么答案可能是“是”,但是如果您有足够的空间来显示日历事件(甚至是每个事件的前几个单词),这将使用户不​​必“擦洗整个日历”(即,单独滚动每个日期)。

-担

于 2009-06-29T03:45:28.900 回答