9

コンボボックスやリストボックスなどのコントロールにフォーカスがあるときにマウスのスクロール ホイールを無効にする方法を知っている人はいますか? 私の目的では、答えが必要なのはコンボボックスだけです。

SelectedIndexChanged で SQL クエリをトリガーするように設定されたコンボボックスがあり、コンボボックスにフォーカスがあるときに誤ってホイールをスクロールすると、約 6 つの SQL クエリが同時に起動されます。

4

7 に答える 7

15

ミックス応答を見つけました。このコードを MouseWheel イベントに入れます。

Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
mwe.Handled = True

それで全部です。プロジェクトが高度な状態にある場合は、新しいクラスを作成する必要はありません。

于 2013-01-08T11:59:30.187 に答える
10

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

これにより、ドロップダウン リストのホイールも無効になることに注意してください。

于 2010-06-03T17:46:08.887 に答える
1

コントロールをサブクラス化すれば可能です (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);
    }
}
于 2010-06-03T17:45:26.190 に答える
0

これをマウスホイール イベントに入れるか、これが適用されるすべてのコントロールの 1 つのハンドラーに入れます。おそらく、wheelsnubber と呼びます。DirectCast(e, HandledMouseEventArgs).Handled = True

于 2015-01-17T14:46:56.233 に答える
0

このスレッドのすべての回答を組み合わせると、カスタム コントロールを作成したくない場合の最善の解決策は、マウスホイール イベントを処理することです。以下では、リストがドロップダウンされている場合、リストをスクロールすることもできます。

コンボボックスがコンボボックス1と呼ばれると仮定します:

If Not ComboBox1.DroppedDown Then
  Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
  mwe.Handled = True
End If
于 2013-12-14T14:14:25.993 に答える
0

そのようなオプションの 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

このようにして、ユーザーがコンボボックスでスクロールできるように維持することができますが、クエリの発生を防ぐこともできます

于 2010-06-03T17:38:19.217 に答える