我有一个包含TextBoxes和ComboBoxes的UserControl,这个UserControl包含在一个AutoScroll设置为True的Panel中。

当文本框具有焦点并且我使用鼠标滚轮滚动时,面板会滚动,当组合框具有焦点并且我使用鼠标滚轮滚动时,组合框中的所选项目会更改。

我确定这是预期的行为,但我想改变它,以便所有鼠标滚轮事件都滚动面板。

为此,我在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