Как я могу узнать, закрылся ли наконечник баллона в системном трее? - PullRequest
5 голосов
/ 29 мая 2009

У меня есть приложение, которое использует NotifyIcon в трее, чтобы скрыть / восстановить приложение, а также всплывающие уведомления для пользователя о событиях приложения. У моего приложения есть очередь уведомлений, и я использую событие NotificationIcon.BalloonTipClosed, чтобы определить, когда нужно сбросить всплывающее окно и показать следующее уведомление (если оно есть в очереди).

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

  1. Всплывающее окно с уведомлением
  2. Пока он виден, пользователь щелкает правой кнопкой мыши значок уведомления, чтобы вызвать контекстное меню, в результате чего всплывающее окно исчезает

Событие BalloonTipClosed не запускается в этом случае - я полагаю, что это ошибка в фреймворке (я использую 2.0), но есть ли у кого-нибудь идеи по этому поводу? Если я не получаю это событие, мое приложение всегда думает, что есть видимый воздушный шар (у меня есть логическое значение, которое не позволяет ему отображать несколько воздушных шаров одновременно), и он никогда не будет отображать другой значок, пока он работает.

Ответы [ 4 ]

3 голосов
/ 05 июня 2009

Этот комментарий относится к комментариям к ответу Аарона, но я пока не могу комментировать.

Если вы обрабатываете события BalloonTipClicked и MouseClick на NotifyIcon (а также BalloonTipClosed), вы можете захватить все способы, которыми воздушный шар может закрыться. Единственное, о чем вы должны знать, это то, что несколько сценариев будут вызывать несколько событий, поэтому обязательно закодируйте их (что-то вроде isClosed = true, а затем сбросьте это значение при отображении нового всплывающего окна).

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

Я думаю, что этот пост от Раймонда Чена об уведомлениях о шаре может помочь вам: http://blogs.msdn.com/oldnewthing/archive/2009/05/04/9585032.aspx

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

Вот что я в итоге сделал, хотя мне не особенно нравится это решение. Я добавил второй таймер в форму и установил его на 10 секунд. Когда всплывающее уведомление (когда я высовываю одно), я запускаю таймер, а затем в BalloonTipClosed я останавливаю его. Если таймер тикает (это означает, что BalloonTipClosed еще не запущен), я отображаю следующий совет вручную.

В результате, если он еще не выстрелил, я забочусь об этом. Тем не менее, я открыт для лучших решений, если у кого-то есть.

0 голосов
/ 29 мая 2009

В обработчике события BalloonTipClicked Event я проверял, была ли нажата правая кнопка мыши и было ли установлено логическое значение false.

...