Question

J'ai un UserControl contenant des TextBoxes et des ComboBox et ce UserControl est contenu dans un panneau avec AutoScroll défini sur True.

Quand une zone de texte a le focus et que je fais défiler avec la molette de la souris, le panneau défile, quand une liste déroulante a le focus et que je fait défiler avec la molette de la souris, l'élément sélectionné dans la liste déroulante change.

Je suis sûr que c'est le comportement souhaité, mais c'est quelque chose que j'aimerais changer, afin que tous les événements de molette de la souris fassent défiler le panneau.

Pour ce faire, je gère le message WM_MOUSEWHEEL dans la méthode WndProc dans une sous-classe ComboBox comme suit:

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-t-il un moyen de le faire sans recourir à une méthode privée sur un contrôle par réflexion?

Était-ce utile?

La solution

Vous pouvez utiliser la fonction Win32 SendMessage pour transférer le contenu de votre message, m , vers Parent.Handle .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top