コンボボックスのMouseWheel動作の変更
-
08-07-2019 - |
質問
TextBoxとComboBoxを含むUserControlがあり、このUserControlはAutoScrollがTrueに設定されたパネルに含まれています。
テキストボックスにフォーカスがあり、マウスホイールでスクロールすると、パネルがスクロールします。コンボボックスにフォーカスがあり、マウスホイールでスクロールすると、コンボボックス内の選択したアイテムが変更されます。
これは意図した動作であると確信していますが、すべてのマウスホイールイベントがパネルをスクロールするように変更したいものです。
これを行うには、ComboBoxサブクラスのWndProcメソッドでWM_MOUSEWHEELメッセージを次のように処理します。
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Const WM_MOUSEWHEEL As Integer = &H20A
Select Case m.Msg
Case WM_MOUSEWHEEL
' Send the message to the parent
GetType(Control).InvokeMember("WmMouseWheel", Reflection.BindingFlags.InvokeMethod Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic, Nothing, Parent, New Object() {m})
Return
End Select
MyBase.WndProc(m)
End Sub
リフレクションを介してコントロールのプライベートメソッドを呼び出さずにこれを行う方法はありますか?
解決
Win32の SendMessage
関数を使用して、メッセージのコンテンツ m
を Parent.Handle
に転送できます。
所属していません StackOverflow