5

トレイで NotifyIcon を使用してアプリケーションを非表示/復元し、アプリケーション イベントのユーザーに通知をポップアップするアプリケーションがあります。私のアプリケーションには通知キューがあり、NotificationIcon.BalloonTipClosed イベントを使用して、いつバルーンをリセットして次の通知を表示するかを決定します (キューに通知がある場合)。

このメソッドは、通常の両方の原因 (タイムアウト時にユーザーがバルーンを閉じるのを許可し、ユーザーがバルーンの "X" をクリックして強制的に閉じる) でうまく機能するようですが、BalloonTipClosed が呼び出されない 3 番目のケースがあります。

  1. 通知バルーンがポップアップする
  2. 通知アイコンが表示されているときに、ユーザーが通知アイコンを右クリックしてコンテキスト メニューを表示すると、バルーンが消える

この場合、BalloonTipClosed イベントはトリガーされません。フレームワークのバグだと思います (私は 2.0 を使用しています)。このイベントを取得しない場合、アプリケーションは常にバルーンが表示されていると見なし (一度に複数のバルーンを表示できないようにするブール値を持っています)、アプリケーションが実行されている限り、別のアイコンを再び表示することはありません。

4

4 に答える 4

3

これはアーロンズの回答へのコメントですが、まだコメントすることはできません。

NotifyIcon(およびBalloonTipClosed)でBalloonTipClickedイベントとMouseClickイベントを処理する場合は、バルーンを閉じることができるすべての方法をキャプチャできます。注意しなければならない唯一のことは、いくつかのシーンリオが複数のイベントをトリガーすることです。そのため、必ずその周りをコーディングしてください(isClosed = trueのように、新しいバルーンが表示されたらリセットします)。

于 2009-06-05T05:19:23.533 に答える
0

BalloonTipClicked イベントのイベント ハンドラーで、マウスの右ボタンがクリックされたかどうか、およびブール値が false に設定されたかどうかを確認します。

于 2009-05-29T03:56:28.140 に答える
0

バルーン通知に関する Raymond Chen の投稿 ( http://blogs.msdn.com/oldnewthing/archive/2009/05/04/9585032.aspx ) が役立つと思います。

于 2009-06-05T10:40:45.820 に答える
0

私はこの解決策が特に好きではありませんが、これが私がやったことです。フォームに 2 つ目のタイマーを追加し、10 秒に設定しました。通知がポップアップしたとき (通知をポップしたとき)、タイマーを開始し、BalloonTipClosed で停止します。タイマーが作動したら (BalloonTipClosed がまだ実行されていないことを意味します)、次のヒントを手動で表示します。

その結果、まだ発火していない場合は、私が処理します。ただし、誰かが解決策を持っている場合は、より良い解決策を受け入れます。

于 2009-06-04T14:58:37.290 に答える