C #, Windows Forms: NotifyIcon с ShowBalloonTip в событии Click больше не запускает событие DoubleClick - PullRequest
0 голосов
/ 12 января 2011

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

    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);
        }
    }

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

Я использую 64-разрядную версию Visual Studio 2010 и Windows 7 Ultimate.

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

Ответы [ 3 ]

1 голос
/ 12 января 2011

Вы должны проверить, если это двойной щелчок в вас 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);
          }
        }
    }
0 голосов
/ 08 ноября 2014

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

0 голосов
/ 27 февраля 2013

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

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

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

Я работаю на .NET Framework 4.0, Windows 7 64 бит и Visual Studio 2010.

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

...