我正在写.Net WinForms中的日历控件,它将显示每个日期的工具提示。如何确定何时显示工具提示?
什么是确定何时显示工具提示的最佳方式?
在MouseMove
立即显示它会使它碍事,所以我想它表明,当鼠标悬停在每个日期细胞。
MouseHover
事件仅在MouseEnter
之后的第一次悬停时触发,因此我无法使用它。
这样做的最好方法是什么?
编辑:我使用的WinForms
我正在写.Net WinForms中的日历控件,它将显示每个日期的工具提示。如何确定何时显示工具提示?
什么是确定何时显示工具提示的最佳方式?
在MouseMove
立即显示它会使它碍事,所以我想它表明,当鼠标悬停在每个日期细胞。
MouseHover
事件仅在MouseEnter
之后的第一次悬停时触发,因此我无法使用它。
这样做的最好方法是什么?
编辑:我使用的WinForms
输入和悬停在SystemInformation.MouseHoverTime指定之间的时间延迟。
如果由于某种原因,无论您使用的任何UI框架的内置工具提示处理代码是不够的,您可以在每个MouseMove之后启动一个Timer,并在触发时显示工具提示。显然,每次移动鼠标时都需要重置定时器,以防止长时间连续的“工具提示雨”。
看一看ToolTip类的AutoPopDelay,在initialDelay和ReshowDelay性能,因为它们控制工具提示的行为。
我一般玩的值,直到我得到的东西,“感觉”的权利。当一个工具提示立即显示时很烦人,而对于简短的工具提示,当它们过早消失时也很烦人。对于很长的工具提示,比如几段(是的,糟糕的设计决定,但是如果有很多信息需要阅读,至少让我看看!),只要我的鼠标静止不动,它就应该保持打开状态。
一个tooltip example从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窗体WPF???):
但是,在所有情况下,都有一种内置的方法来完成它,所以根本没有必要编写自己的代码。
如果您的情况如此自定义以至于您确实需要编写自己的代码,那么我真的需要更多地了解如何在日历中表示数字来帮助您。
最后一件事:您没有真正问过这个问题 - 它可能不在您的控制之下 - 但您可能想问自己,提示工具提示是否是首先显示日历信息的最佳方式。如果空间非常紧张,那么答案可能是“是”,但如果您有足够的空间来显示日历事件(甚至每个事件的前几个单词),这将使用户不必“擦洗整个日历“(即分别翻阅每个日期)。
-Dan
“不过,在所有情况下,都有内置的方法来完成它,所以根本不需要编写自己的代码。” - 所以不是真的。在简单情况下(即悬停在按钮上)是正确的,但在某些控件中,您需要自己控制行为,并且由于MouseHover的行为而不易实现。 – 2009-06-29 03:52:34
埃德嗨, 所以,我猜测甚至内置的工具提示控制依赖于MouseHover,它只是不够可靠每次都显示工具提示?我想我已经注意到了几次。 在这种情况下,我不知道它是否会工作到做这样的事情: 1.在Control_MouseEnter,创建间隔= 500ms的Timer对象。 2.在Timer_Elapsed上,显示工具提示。 3.在Control_MouseLeave上,隐藏工具提示。 – devuxer 2009-06-29 04:03:45
的问题是,我要显示工具提示时,每个单元上徘徊,而不仅仅是当整个控制上徘徊。工具提示类(AFAIK)本身不支持这个,所以我必须自己展示它。问题是,我应该什么时候显示它? – SLaks 2009-06-29 09:01:53