我正在.Net WinForms中编写一个日历控件,它将显示每个日期的工具提示。
确定何时显示工具提示的最佳方法是什么?
立即在MouseMove
中显示它会阻碍它,所以我希望它显示鼠标悬停在每个日期单元格上的时间。
MouseHover
事件仅在MouseEnter
之后第一次悬停时触发,因此我无法使用它。
最好的方法是什么?
编辑:我正在使用WinForms
答案 0 :(得分:6)
Enter和Hover之间的时间延迟在SystemInformation.MouseHoverTime中指定。
如果由于某种原因,您使用的任何UI框架的内置工具提示处理代码都不够,您可以在每个MouseMove之后启动一个Timer,并在它触发时显示工具提示。显然,每次移动鼠标时都需要重置Timer,以防止出现长串“工具提示雨”。
答案 1 :(得分:0)
查看ToolTip类的AutoPopDelay,InitialDelay和ReshowDelay属性,因为它们控制工具提示的行为。
我一般都会玩弄价值观,直到我得到'感觉'正确的东西。当工具提示立即显示时很烦人,而对于简短的工具提示,当它们过早消失时它也很烦人。对于很长的工具提示,比方说,几个段落(是的,糟糕的设计决定,但如果有很多信息要阅读,至少让我读一读!)那么只要我的鼠标静止就应该保持打开状态。
来自MSDN的tooltip example提供以下值:
AutoPopDelay = 5000;
InitialDelay = 1000;
ReshowDelay = 500;
// Force the ToolTip text to be displayed whether or not the form is active.
ShowAlways = true;
正如评论中所提到的,海报希望以编程方式触发工具提示。为此,需要调用ToolTip.Show()。要获得延迟效果,您可能希望运行一个计时器来计算鼠标静止的时间。只要鼠标在控件内进入,离开或移动,就应重置此时间。
答案 2 :(得分:0)
了解您正在使用哪种技术(ASP.NET?Forms?WPF?)会有所帮助,因为它们都有不同的方法来实现工具提示:
但是,在所有情况下,都有内置的方法来执行此操作,因此您可能根本不需要编写自己的代码。
如果您的情况如此习惯,以至于您需要编写自己的代码,我真的需要了解更多有关您如何表示日历中的数字以帮助您的信息。
最后一件事:您并没有真正问过这个问题 - 它可能不在您的控制之下 - 但您可能想问问自己,工具提示是否是首先显示日历信息的最佳方式。如果空间非常紧张,那么答案可能是“是”,但如果你有足够的空间来显示日历事件(甚至是每个事件的前几个单词),这将使用户不必“擦洗整个日历“(即,单独滚动每个日期)。
-Dan