修改Combobox的MouseWheel行为
-
08-07-2019 - |
题
我有一个包含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
。
不隶属于 StackOverflow