ToolStripComboBoxでマウススクロールを防ぐ方法は?
-
27-09-2019 - |
質問
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;
}
}
ホイールでドロップしたコンボボックスをスクロールすると選択が変更されないため、期待どおりに機能します