ToolStripComboBox でマウス スクロールを無効にしようとしています。Mouse Wheel イベントをキャッチできると思っていましたが、イベントは ComboBox で使用できますが、代わりに ToolStripComboBox では使用できません。何か案は?
2 に答える
は、適切な名前のプロパティで、基になるコントロールを便利にToolStripComboBox
公開します。これにより、 にラップされていないプロパティ、メソッド、およびイベントにアクセスできます。ComboBox
ComboBox
ToolStripComboBox
そして、おそらくご存じのとおり、標準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
コントロールをサブクラス化し、上記と同じ方法でその動作をオーバーライドすることもできます。
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;
}
}
ドロップされたコンボボックスをホイールでスクロールしても選択は変更されないため、期待どおりに機能します