2009-06-03 12 views
1

特定のフラグが設定されていないときにcontextmenustripを非表示にする必要があります。コンテキストメニューストリップの表示/非表示を明示的に制御することはできないと思うので、コンテキストメッシュリストが関連付けられているコントロールをマウスの右ボタンでクリックすることに決めました。それは、私はフラグが設定されている場合は、ボタンが右のボタンであるかどうかをチェックするMouseClickイベントを処理しようと、それはUserControlです。しかし、私の驚きには、マウス右クリックでイベントが発動するのではなく、左クリックだけでイベントが発生します。明示的にContextMenuStripがC#でロードされないようにする

私に間違いがありますか、または回避策がありますか?

右クリックを検出しつつある私がコントロール上でMOUSE_DOWNイベントを処理したときに、質問のタイトルと説明は、いくつかのより多くの研究を行った後

を変更し、私は、火災に右クリックを得ました。しかし、どのようにしてが明示的にContextMenuStripを読み込まないようにするかはまだ分かりません。。もう一つの質問は、MouseClickが右ボタンクリックを検出しなかった理由です。


現在の回避策

これは私がやっている現在の回避策でのイベントハンドラ

userControl1.Control1.MouseDown += new MouseEventHandler(Control1_MouseDown); 

void Control1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right && flag == false) 
     { 
      userControl1.Control1.ContextMenuStrip = null; 
     } 
     else 
     { 
      userControl1.Control1.ContextMenuStrip = contextMenuStrip1; 
     } 

    } 

を登録します。 しかし、ContextMenuStripのオープニングイベントでどのように変更できますか?

+0

コードを投稿することは可能ですか? – NinethSense

+0

あなたの質問に新しく挿入された「読み込み中」とはどういう意味ですか?インスタンスを作成することを意味しますか?それとも以前のように、ポップアップを意味するのですか? – OregonGhost

+0

Clickイベントの説明については、このページのhttp://msdn.microsoft.com/en-us/library/system.windows.forms.control.click.aspxを参照してください。クリックイベント – ChrisF

答えて

2

キーボードのコンテキストメニューキー(または呼び出されたもの)でコンテキストメニューが呼び出されると、ソリューションは失敗します。 Openingイベントを使用して、コンテキストメニューのオープンをキャンセルすることができます。

+0

オープニングイベントを試しましたが、何が変わるのですか?どのようにすれば開くことができなくなるのですか? –

+0

まず、ドキュメントを読むことができます。 OpeningイベントはCancelEventArgsパラメータを取得します。ここでは、キャンセルをtrueに設定して開きをキャンセルする必要があります。 – OregonGhost

+0

CancelEventArgs.Cancelをtrueに設定します。 – Ants

1

回避策があります。

は、メニュー項目AがAのためのクリックイベントでコントロールB.

のコンテキストメニューを制御するフラグをセットとしましょう、あなたはそれをオフにするb.ContextMenu =何も設定されていない、と背中b.ContextMenuを設定しますコンテクストメニューコントロールに戻してスイッチをオンに戻します。

+0

私はハックのように聞こえます。メニューをポップアップできるコントロールが複数ある場合は、それを維持するのが本当に難しくなります。 – OregonGhost

0

WinFormsには、Clickイベントもあります。これは、マウスの右クリックで発生します。

WPFを使用している場合は、MouseRightButtonDownMouseRightButtonUpイベントが必要です。

このMSDN pageの表には、どのコントロールがどのクリックイベントを発生させるかが記載されています。重要なことに、Button、CheckBox、RichTextBox、およびRadioButton(および他のいくつかのもの)は、右クリックでイベントを発生させたりイベントを発生させたりしません。

関連する問題