コンボボックスやリストボックスなどのコントロールにフォーカスがあるときにマウスのスクロール ホイールを無効にする方法を知っている人はいますか? 私の目的では、答えが必要なのはコンボボックスだけです。
SelectedIndexChanged で SQL クエリをトリガーするように設定されたコンボボックスがあり、コンボボックスにフォーカスがあるときに誤ってホイールをスクロールすると、約 6 つの SQL クエリが同時に起動されます。
コンボボックスやリストボックスなどのコントロールにフォーカスがあるときにマウスのスクロール ホイールを無効にする方法を知っている人はいますか? 私の目的では、答えが必要なのはコンボボックスだけです。
SelectedIndexChanged で SQL クエリをトリガーするように設定されたコンボボックスがあり、コンボボックスにフォーカスがあるときに誤ってホイールをスクロールすると、約 6 つの SQL クエリが同時に起動されます。
ミックス応答を見つけました。このコードを MouseWheel イベントに入れます。
Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
mwe.Handled = True
それで全部です。プロジェクトが高度な状態にある場合は、新しいクラスを作成する必要はありません。
ComboBox コントロールでは、MouseWheel イベントの動作を簡単にオーバーライドできません。プロジェクトに新しいクラスを追加し、以下に示すコードを貼り付けます。コンパイル。ツールボックスの上部から新しいコントロールをフォームにドロップします。
Friend Class MyComboBox
Inherits ComboBox
Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
mwe.Handled = True
End Sub
End Class
これにより、ドロップダウン リストのホイールも無効になることに注意してください。
コントロールをサブクラス化すれば可能です (C# の場合は申し訳ありません)。
public class NoScrollCombo : ComboBox
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
protected override void WndProc(ref Message m)
{
if (m.HWnd != this.Handle)
{
return;
}
if (m.Msg == 0x020A) // WM_MOUSEWHEEL
{
return;
}
base.WndProc(ref m);
}
}
これをマウスホイール イベントに入れるか、これが適用されるすべてのコントロールの 1 つのハンドラーに入れます。おそらく、wheelsnubber と呼びます。DirectCast(e, HandledMouseEventArgs).Handled = True
このスレッドのすべての回答を組み合わせると、カスタム コントロールを作成したくない場合の最善の解決策は、マウスホイール イベントを処理することです。以下では、リストがドロップダウンされている場合、リストをスクロールすることもできます。
コンボボックスがコンボボックス1と呼ばれると仮定します:
If Not ComboBox1.DroppedDown Then
Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
mwe.Handled = True
End If
そのようなオプションの 1 つは、コンボ ボックスにハンドラーを追加し、そのコンボ ボックス内で状況を解決することです。コードがどのように設定されているかはわかりませんが、イベントがいつ発生したかを知っていれば、クエリが発生しないように何らかの条件を設定できると思います
'''Insert this statement where your form loads
AddHandler comboBoxBeingWatched.MouseWheel, AddressOf buttonHandler
Private Sub buttonHandler(ByVal sender As System.Object, ByVal e As System.EventArgs)
'''Code to stop the event from happening
End Sub
このようにして、ユーザーがコンボボックスでスクロールできるように維持することができますが、クエリの発生を防ぐこともできます