2011-08-08 6 views
1

私は簡単な質問がありましたコンテキストメニューの表示方法とクリックイベントを処理しないようにする

私はカスタムチャートコントロールを開発しています。チャートコントロールを使用すると、線を描画したり、矩形をドロップすることができます(何でも構いません)。この開始描画/ドロップオプションは、マウスのダウン、左ボタンのクリック、マウスの右下のクリックがコンテキストメニューを表示するように設定されています。

私の問題は、表示されている間に何も選択せずにコンテキストメニューから出てきたら、右クリックすると再びメニューが表示されるということです。しかし、現時点では、コンテキストメニューはおむつになり、左クリックの残りの部分も実行されます。コンテキストメニューが左クリックで表示されたことを確認するにはどうすればいいですか?ユーザーはコンテキストメニューから出て、開始/終了ロジックを実行しないことを望みます。

追加情報: 私はC#プロジェクトに取り組んでいます、私は、コンテキストメニュークローズイベントをキャプチャしようとしたが、それが引き金とそれがコントロールマウスダウンイベントに来て、私はコンテキストメニューが前に示されたされたことを確認することはできません前に、自分自身を閉じてマウスの左ボタン・ダウン・イベント・ロジックの残りの部分を回避することができます。

何か助けを前もって高く評価します。

答えて

2

ここには簡単な解決策があります。

フォームに関連付けられたContextMenuを持つListBoxコントロールがあるとします。

private void listBox1_MouseClick(object sender, MouseEventArgs e) 
    { 
     listBox1.Items.Add("new item added - " + DateTime.Now.ToLongTimeString()); 
    } 

今すぐと呼ばれる、フォームレベルでのブール変数を定義するので、同じようをmenuClosed:

private bool menuClosed = false; 

今すぐコンテキストをキャプチャ今はコントロールに、それがクリックされるたびにリスト項目を追加したいです

private void contextMenuStrip1_Closed(object sender, ToolStripDropDownClosedEventArgs e) 
    { 
     menuClosed = true; 
    } 

今すぐコードTHAを更新しますので、フラグを反転などのメニューのクローズイベントtは、次のようなリストボックスコントロールに項目を追加します。

private void listBox1_MouseClick(object sender, MouseEventArgs e) 
    { 
     if (!menuClosed) 
      listBox1.Items.Add("new item added - " + DateTime.Now.ToLongTimeString()); 
    } 

コンテキストメニューが閉じているとき、私はちょうどtrueにブール変数を設定しています、そして、私は、アイテムがすべきかどうかを確認するためにブールフラグをチェックリストに追加する。特定のコマンドを実行するかどうかを決定するために、これとちょっと同じメカニズムを使用することができます。それが役に立てば幸い。

+0

こんにちはNexus、私は同じことを試みましたが、クリック時のコンテキストメニューでは、クリック/マウスイベントに当たる前に閉鎖されています。したがって、bool値は、コントロールのクリックイベントになるまでに常にtrueを返します。これは私が回避しようとしている問題です。ご協力いただきありがとうございます。 –

+0

は、MouseDownイベントでグラフコントロールのマウス操作を実装したようです。 mousedownはすべての左/右クリックに適用されるため、私が言及したコードスニペットはその場合は機能しません。 Click()イベントでこれらのコードブロックを移動できない場合は、より良い解決策を考え出す必要があります。私が何かに出くわす場合、あなたを知らせてください[ – Nexus

+0

乾杯。 :)はい私はマウスのコードを残す必要があります。私はClickイベントを試していました。また、クリックインスタンスがコンテキストメニューを最初に消して、クリックイベントが実行されます。同じ問題:( –

関連する問題