3

ToolStripComboBox でマウス スクロールを無効にしようとしています。Mouse Wheel イベントをキャッチできると思っていましたが、イベントは ComboBox で使用できますが、代わりに ToolStripComboBox では使用できません。何か案は?

4

2 に答える 2

3

は、適切な名前のプロパティで、基になるコントロールを便利ToolStripComboBox公開します。これにより、 にラップされていないプロパティ、メソッド、およびイベントにアクセスできます。ComboBoxComboBoxToolStripComboBox

そして、おそらくご存じのとおり、標準ComboBoxコントロールは、コンボ ボックスにフォーカスがあるときにマウス ホイールがスクロールされるたびに発生するMouseWheelイベントを公開します。

これら 2 つのことを組み合わせて、コントロールの基にToolStripComboBoxなるComboBoxコントロールのMouseWheelイベントのハンドラーを追加し、その既定の動作をオーバーライドできます。

ToolStripしたがって、 aと aを含むフォームがあると仮定するとToolStripComboBox、次のコードのようなものを使用できます。

public partial class Form1 : Form
{
   public Form1()
   {
      InitializeComponent();

      //Attach a handler for the MouseWheel event
      ToolStripComboBox1.ComboBox.MouseWheel += new MouseEventHandler(ToolStripComboBox_MouseWheel);
   }

   private void ToolStripComboBox_MouseWheel(object sender, MouseEventArgs e)
   {
      //Cast the MouseEventArgs to HandledMouseEventArgs
      HandledMouseEventArgs mwe = (HandledMouseEventArgs)e;

      //Indicate that this event was handled
      //(prevents the event from being sent to its parent control)
      mwe.Handled = true;
   }
}

または、もちろん、常に既存のToolStripComboBoxコントロールをサブクラス化し、上記と同じ方法でその動作をオーバーライドすることもできます。

于 2010-11-24T08:29:01.740 に答える
0

Cody Greyが提案したことに加えて、コンボボックスを落としたときにホイールのスコーリングを機能させたい場合があります。MouseWheelハンドルでDroppedDown状態をチェックするだけです。


    public class MyToolStripComboBox : ToolStripComboBox
    {
        public MyToolStripComboBox()
        {
            this.ComboBox.MouseWheel += new MouseEventHandler(ComboBox_MouseWheel);
        }

        void ComboBox_MouseWheel(object sender, MouseEventArgs e)
        {
            if (!this.ComboBox.DroppedDown)
                ((HandledMouseEventArgs)e).Handled = true;
        }
    }

ドロップされたコンボボックスをホイールでスクロールしても選択は変更されないため、期待どおりに機能します

于 2011-09-10T15:45:54.740 に答える