Modificando o comportamento MouseWheel de uma caixa de combinação
-
08-07-2019 - |
Pergunta
Eu tenho um UserControl que contém TextBoxes e ComboBoxes e este UserControl está contido em um painel com AutoScroll definida como True.
Quando uma caixa de texto tem o foco e eu rolar com a roda do mouse, em seguida, os pergaminhos do painel, quando um combobox tem o foco e eu rolar com a roda do mouse, em seguida, o item selecionado nas mudanças combobox.
Eu tenho certeza que este é o comportamento desejado, mas é algo que eu gostaria de mudar, de modo que todos os eventos mouseWheel rolar o painel.
Para fazer isso eu estou lidando com a mensagem WM_MOUSEWHEEL no método WndProc em uma subclasse ComboBox da seguinte forma:
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
Existe uma maneira de fazer isso sem recorrer ao chamar um método particular em um controle via reflexão?
Solução
Você pode usar a função SendMessage
Win32 de transmitir o conteúdo de sua mensagem, m
, para Parent.Handle
.