Как определить, когда показывать всплывающую подсказку? - PullRequest
3 голосов
/ 29 июня 2009

Я пишу элемент управления календаря в .Net WinForms, который будет показывать всплывающую подсказку для каждой даты.

Какой лучший способ определить, когда показывать всплывающую подсказку?

Немедленное отображение в MouseMove помешало бы этому, поэтому я бы хотел, чтобы оно отображалось, когда указатель мыши находится над каждой ячейкой даты.

Событие MouseHover срабатывает только при первом наведении после MouseEnter, поэтому я не могу его использовать.

Какой лучший способ сделать это?

РЕДАКТИРОВАТЬ : я использую WinForms

Ответы [ 3 ]

6 голосов
/ 29 июня 2009

Временная задержка между вводом и наведением указана в SystemInformation.MouseHoverTime .

Если по какой-то причине встроенного кода обработки всплывающей подсказки для какой-либо используемой вами инфраструктуры пользовательского интерфейса недостаточно, вы можете просто запустить Timer после каждого MouseMove и показать подсказку при ее запуске. Очевидно, что вам нужно будет сбрасывать таймер при каждом перемещении мыши, чтобы избежать длинных серий «дождя всплывающих подсказок».

0 голосов
/ 29 июня 2009

Было бы полезно узнать, какую технологию вы используете (ASP.NET? Forms? WPF?), Потому что все они имеют разные способы реализации всплывающих подсказок:

  • С ASP.NET вы можете просто установить Свойство ToolTip элемента управления (например, в качестве элемента управления Label, который показывает число в вашем календаре), и это автоматически покажет подсказку после небольшой задержки при зависании над контролем.
  • В формах, я думаю, вы должны на самом деле создать объект ToolTip тогда прикрепить к нему элемент управления.
  • В WPF вы можете добавить Label.ToolTip элемент вашего кода XAML.

Тем не менее, во всех случаях есть встроенный способ сделать это, так что вам вообще может не потребоваться писать собственный код.

Если ваша ситуация настолько нестандартна, что вам нужно написать собственный код, мне действительно нужно знать больше о том, как вы представляете числа в своем календаре, чтобы помочь вам.

Последнее: вы на самом деле не спрашивали об этом - и это может быть не под вашим контролем - но вы можете спросить себя, является ли всплывающая подсказка лучшим способом для отображения информации календаря в первую очередь. Если места действительно мало, ответом может быть «да», но если у вас достаточно места для отображения событий календаря (или даже первых нескольких слов каждого события), это избавит пользователя от необходимости «чистить все». календарь »(т. е. переворачивать каждую дату отдельно).

1017 * Дан *

0 голосов
/ 29 июня 2009

Посмотрите на свойства AutoPopDelay, InitialDelay и ReshowDelay класса ToolTip, так как они управляют поведением всплывающей подсказки.

Я обычно играю со значениями, пока не получу что-то, что "чувствует" правильно. Это раздражает, когда всплывающая подсказка отображается сразу, а для коротких подсказок раздражает, когда они исчезают слишком рано. Для действительно длинных всплывающих подсказок, скажем, нескольких абзацев (да, плохое дизайнерское решение, но если есть много информации для чтения, по крайней мере, дайте мне прочитать!), То она должна оставаться открытой, пока моя мышь стоит.

A Пример всплывающей подсказки из 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 (). Чтобы получить эффект задержки, вы, вероятно, захотите запустить таймер, который считает время, в течение которого мышь находится в неподвижном состоянии. Всякий раз, когда мышь входит, покидает или перемещается внутри элемента управления, это время должно быть сброшено.

...