質問

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

役に立ちましたか?

解決

ToolStripComboBox 根底にあることを支援します ComboBox 適切な名前の制御 ComboBox 財産. 。これにより、包まれていないプロパティ、方法、イベントにアクセスできます。 ToolStripComboBox.

そして、おそらくご存知のように、標準 ComboBox 制御はaを公開します MouseWheel イベント マウスホイールがスクロールされるたびに、コンボボックスが焦点を合わせている間に火が発生します。

これらの2つのことをまとめると、 ToolStripComboBox コントロールの根底 ComboBox コントロール MouseWheel イベント、およびデフォルトの動作をオーバーライドします。

だから、あなたがを含むフォームがあると仮定すると ToolStrip そして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 上記と同じように、その動作をそこに制御およびオーバーライドします。

他のヒント

Cody Grayが提案したことに加えて、コンボボックスがドロップされたときにホイールスコールを動作させたいと思うかもしれません。マウスホイールハンドルのドロップダウン状態をチェックするだけです:


    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;
        }
    }

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top