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?

Foi útil?

Solução

Você pode usar a função SendMessage Win32 de transmitir o conteúdo de sua mensagem, m, para Parent.Handle.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top