修改 Combobox 的 MouseWheel 行为

Modifying the MouseWheel behaviour of a Combobox

提问人:Patrick McDonald 提问时间:5/7/2009 更新时间:5/7/2009 访问量:1026

问:

我有一个包含 TextBox 和 ComboBox 的 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

有没有办法在不通过反射对控件调用私有方法的情况下做到这一点?

.NET Winforms 鼠标滚轮

评论


答:

2赞 Tim Robinson 5/7/2009 #1

可以使用 Win32 函数将消息的内容 转发到 。SendMessagemParent.Handle