質問

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 に転送できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top