2009-06-29 69 views
3

我正在写.Net WinForms中的日历控件,它将显示每个日期的工具提示。如何确定何时显示工具提示?

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

MouseMove立即显示它会使它碍事,所以我想它表明,当鼠标悬停在每个日期细胞。

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

这样做的最好方法是什么?

编辑:我使用的WinForms

回答

6

输入和悬停在SystemInformation.MouseHoverTime指定之间的时间延迟。

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

0

看一看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()。为了获得延迟效果,您可能希望计时器运行,计算鼠标静止的时间。只要鼠标进入,离开或在控制内移动,此时应该重置。

+0

的问题是,我要显示工具提示时,每个单元上徘徊,而不仅仅是当整个控制上徘徊。工具提示类(AFAIK)本身不支持这个,所以我必须自己展示它。问题是,我应该什么时候显示它? – SLaks 2009-06-29 09:01:53

0

这将是有益知道哪些技术,您正在使用,因为它们都具有实施提示不同的方式(ASP.NET窗体WPF???):

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

但是,在所有情况下,都有一种内置的方法来完成它,所以根本没有必要编写自己的代码。

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

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

-Dan

+0

“不过,在所有情况下,都有内置的方法来完成它,所以根本不需要编写自己的代码。” - 所以不是真的。在简单情况下(即悬停在按钮上)是正确的,但在某些控件中,您需要自己控制行为,并且由于MouseHover的行为而不易实现。 – 2009-06-29 03:52:34

+0

埃德嗨, 所以,我猜测甚至内置的工具提示控制依赖于MouseHover,它只是不够可靠每次都显示工具提示?我想我已经注意到了几次。 在这种情况下,我不知道它是否会工作到做这样的事情: 1.在Control_MouseEnter,创建间隔= 500ms的Timer对象。 2.在Timer_Elapsed上,显示工具提示。 3.在Control_MouseLeave上,隐藏工具提示。 – devuxer 2009-06-29 04:03:45