2011-01-12 8 views
0

При использовании NotifyIcon в Windows Forms/C#/Net Framework 2.0, если я отображать текст всплывающей подсказки в Mouseclick или Click. события, ни один из DoubleClick или MouseDoubleClick события не будут стрелять:C#, Windows Forms: NotifyIcon с ShowBalloonTip в Click случае больше не запускает событие DoubleClick

private void notifyIcon_DoubleClick(object sender, EventArgs e) 
    { 
     MessageBox.Show("double click"); // this is never called on double-click 
    } 

    private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     MessageBox.Show("mouse double click"); // this is never called on double-click 
    } 

    private void notifyIcon_MouseClick(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      this.notifyIcon.BalloonTipText = "Some Info"; 
      this.notifyIcon.ShowBalloonTip(1000); 
     } 
    } 

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

Я использую Visual Studio 2010 и Windows 7 Ultimate 64-бит.

Заранее благодарим за любую помощь!

+1

Ваш код работает на моем ПК. Я предлагаю проверить вашу «скорость двойного клика» –

+0

Когда вы говорите «скорость двойного клика», вы имеете в виду настройку в Windows? – AnAurelian

ответ

1

Вы должны проверить, если это двойной щелчок в вас notifyIcon_MouseClick

private void notifyIcon_MouseClick(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      if (e.Clicks < 2) //not a doubleclick 
      { 
       this.notifyIcon.BalloonTipText = "Some Info"; 
       this.notifyIcon.ShowBalloonTip(1000); 
      } 
     } 
    } 
+1

Спасибо, я пробовал ваше предложение, но e.Clicks всегда 0, даже когда я дважды щелкаю. – AnAurelian

0

Это, вероятно, ошибка. Я не знаю, кто виноват.

e.Clicks обнуляется при вызове notifyIcon.ShowBalloonTip. Если showballoontip присваивается недопустимый аргумент, на консоль записывается исключение, а e.Clicks становится выше 1.

Я использую мышь Logitech g5 с прошивкой 1.2. Это не программное обеспечение заданного значения logitech. Откат назад к драйверу microsoft также не помог.

Я бегу на .NET Framework 4.0, Windows 7 64 битной и Visual Studio 2010.

Это действительно странно ошибка. Иногда точно такая же сборка иногда не показывает ошибку. В том же сеансе это может произойти снова. После восстановления ошибка снова появляется.

+0

Мое решение состоит в том, чтобы не различать однократный и двойной щелчок. Один клик всегда открывает приложение - никаких всплывающих подсказок. – Harmen

0

Это действительно ошибка. Я нашел лучшее обходное решение, чем предлагалось. Не пытайтесь запускать BalloonTip из событий Click или DoubleClick. Вместо этого вы можете создать логический флаг глобально, а затем установить флаг в событии Click. Также создайте таймер(), который срабатывает периодически, каждые 1000 мс отлично подходит для меня. Когда срабатывает таймер, он проверяет флаг, и если он установлен, то соответственно запускает ShowBalloonTip(), также сбросив флаг. Это не нарушает поведения Click или DoubleClick и по-прежнему достигает желаемого поведения для BalloonTip, из-за изменений, происходящих в событиях Click или DoubleClick на NotifyIcon. Отлично работает для меня! Извините, у меня нет кода snipet легко обеспечить, но это описание должно дать представление о том, как сделать это легко.

Смежные вопросы