我有一个包含文本框和组合框的用户控件,这个用户控件包含在一个面板中,其中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
有没有一种方法可以做到这一点而不用通过反射调用控件上的私有方法?