Modification du comportement MouseWheel d'un combobox
-
08-07-2019 - |
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?
La solution
Vous pouvez utiliser la fonction Win32 SendMessage
pour transférer le contenu de votre message, m
, vers Parent.Handle
.