none
コンボボックスの垂直スクロールバー上でマウス右クリックした際のコンテキストメニュー制御方法について RRS feed

  • 質問

  • Visual Studio 2005 Professional Edition(.Net Framework2.0)でVB2005のアプリケーション開発をしています。
    コンボボックスの標準のマウスイベントを拾えなくて困っています。

    コンボボックスをドロップダウンした際、件数が多い場合に表示される垂直スクロールバーをマウスで右クリックすると、スクロールに関するコンテキストメニューが出力されますが、これを表示しないようにする方法はないでしょうか?

    現在抱えている問題は、
    コンボボックスの値が変わったら、あるエラー処理を行い、メッセージボックスを表示しています。
    (メッセージボックス表示は、SelectionChangeCommittedイベントの中に記述)
    ドロップダウン表示させて、マウスカーソルを下に移動し、1件選択した状態で、マウスカーソルを垂直スクロールバー上に持っていって右クリックすると、メッセージボックスが表示されますが、マウスカーソルが砂時計のままとなり、メッセージボックスのボタンをマウスでクリックできなくなってしまいます。

    コンテキストメニューを非表示としなくても、マウスカーソルが通常の矢印となって、メッセージボックスのボタンが普通にクリックできるようになる方法でももちろん構いません。
    マウスクリックでメッセージボックスが消せなくなってしまい、マウス操作不能に陥るのが問題で、これを回避したいのです。

    2009年3月25日 4:04

回答

  • 確かにそうなりますね。
    スクロールバーの右クリックだけでなく、ドロップダウンしてるときにメニューキー(109 キーボードで右 Ctrl の一つ左のキー)を入力しても発生します。
    一番簡単な回避方法は、メッセージボックスの表示を BeginInvoke を使用して少し遅らせる方法でしょう。一瞬だけコンテキストメニューが表示されちゃいますけど。
    • 回答としてマーク SHINKANSEN 2009年3月26日 8:57
    2009年3月25日 10:06

すべての返信

  • 確かにそうなりますね。
    スクロールバーの右クリックだけでなく、ドロップダウンしてるときにメニューキー(109 キーボードで右 Ctrl の一つ左のキー)を入力しても発生します。
    一番簡単な回避方法は、メッセージボックスの表示を BeginInvoke を使用して少し遅らせる方法でしょう。一瞬だけコンテキストメニューが表示されちゃいますけど。
    • 回答としてマーク SHINKANSEN 2009年3月26日 8:57
    2009年3月25日 10:06
  • Hongliangさん。回答ありがとうございます。

    若干ちらつきますが、許容範囲です。
    BeginInvokeを使用して、メッセージ表示を別スレッドにすることで要件満たせそうです。

    参考HP https://codezine.jp/article/detail/139#begin_end_invoke
    • 回答としてマーク SHINKANSEN 2009年3月26日 8:57
    • 回答としてマークされていない SHINKANSEN 2009年3月26日 8:57
    2009年3月26日 7:17