2009-05-28 3 views
5

トレイにNotifyIconを使用してアプリケーションを隠したり復元したり、アプリケーションイベントのユーザーにポップアップ通知を表示するアプリケーションがあります。私のアプリケーションには通知キューがあり、NotificationIcon.BalloonTipClosedイベントを使用してバルーンをリセットし、次の通知を表示するかどうかを決定します(キュー内に通知がある場合)。システムトレイのバルーンチップが閉じているかどうかを確認するにはどうすればよいですか?

このメソッドは、通常の原因(ユーザーがタイムアウトするとバルーンを閉じることができます。ユーザーがバルーンで「X」をクリックして強制的に閉じることができます)が、BalloonTipClosedが 'トンが呼び出される:それは目に見えるですが

  1. 通知バルーンが
  2. をポップアップし、通知アイコンでユーザーを右クリックすると

BalloonTipClosedイベントは」doesnのを消えてバルーンを引き起こして、コンテキストメニューを表示しますこれでトリガされるインスタンス - 私はそれがフレームワーク(私は2.0を使用している)のバグだと思っていますが、誰もがこの周りのアイデアを持っていますか?このイベントが表示されない場合、アプリケーションでは常にバルーンが表示されていると考えられます(複数のバルーンを一度に表示できないブール値があります)。実行中はもう一度別のアイコンを表示しません。

答えて

0

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

結果はまだ発射されていない場合は、私はそれを世話します。しかし、もし誰かがいるなら、私はより良い解決策に向かっています。

0

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

3

これはAaronsの回答のコメントに属しますが、まだコメントすることはできません。

BalloonTipClickedイベントとMouseClickイベントをNotifyIcon(およびBalloonTipClosed)で処理すると、バルーンを閉じることができるすべての方法を取得できます。あなたが知っておかなければならないことは、いくつかのシーンが複数のイベントをトリガーすることですので、必ずそれをコード化してください(isClosed = trueのようにして、新しいバルーンが表示されたときにリセットしてください)。

+0

これに伴う問題は、私はicon_clickイベントをキャプチャすることができますが、ということである、と私はバルーンがその時点で閉じられている知っている、私は次のバルーンを表示するタイミングがわからない。すぐにそれを表示することは、ユーザーがそこで何をしているのかを決定するでしょう。私はクリック後にそれを行うことができました。これはまだタイマーが関係するので、すべてのインスタンスでタイマーを使用したいと思います。 – SqlRyan

+0

良い点。コンテキストメニューが起動されていない場合は、メニューの[開始]および[終了]イベントを処理し、次のバルーンのみを表示すると、コンテキストメニューをアクティブにすることができます。ユーザーが選択したメニュー項目に基づいて決定することもできます – Bob

0

私はバルーン通知に関するレイモンド・チェンからのこの記事はあなたを助けるかもしれないと思う: http://blogs.msdn.com/oldnewthing/archive/2009/05/04/9585032.aspx

+0

これはまさに私にとって起こっていることだと思いますが、実際に気球が閉じられているかどうかを判断する方法はないと同氏は同意しています。気球が何らかの形で閉じられている場合、BalloonTipClosedイベントが発生するはずですが、NotifyIconをクリックして気球を閉じると起動しないと思っています。 私のアプリケーションのフレームワークバージョンをアップグレードし、これが動作を変更するかどうかを確認します。 – SqlRyan

関連する問題