我正在.Net WinForms 中编写一个日历控件,它将显示每个日期的工具提示。
确定何时显示工具提示的最佳方法是什么?
立即显示它MouseMove
会妨碍它,所以我希望它显示鼠标悬停在每个日期单元格上的时间。
该MouseHover
事件仅在 之后的第一次悬停时触发MouseEnter
,因此我无法使用它。
最好的方法是什么?
编辑:我正在使用 WinForms
Enter 和 Hover 之间的时间延迟在SystemInformation.MouseHoverTime中指定。
如果由于某种原因,您使用的任何 UI 框架的内置工具提示处理代码都不够用,您可以在每次 MouseMove 之后启动一个 Timer 并在它触发时显示一个 Tooltip。显然,每次移动鼠标时都需要重置计时器,以防止出现一系列“工具提示雨”。
查看 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()。要获得延迟效果,您可能需要运行一个计时器来计算鼠标静止的时间。每当鼠标进入、离开或在控件内移动时,这个时间都应该被重置。
了解您使用的是哪种技术(ASP.NET?Forms?WPF?)会很有帮助,因为它们都有不同的实现工具提示的方式:
但是,在所有情况下,都有一种内置的方法可以做到这一点,因此您可能根本不需要编写自己的代码。
如果您的情况如此定制以至于您确实需要编写自己的代码,那么我真的需要更多地了解您如何表示日历中的数字以帮助您。
最后一件事:你并没有真正问过这个问题——它可能不在你的控制之下——但你可能想问自己,工具提示是否是首先显示日历信息的最佳方式。如果空间真的很紧,那么答案可能是“是”,但是如果您有足够的空间来显示日历事件(甚至是每个事件的前几个单词),这将使用户不必“擦洗整个日历”(即,单独滚动每个日期)。
-担