2009-05-07 12 views
0

J'ai un contrôle UserControl contenant des zones de texte et des zones de liste déroulantes et ce contrôle UserControl est contenu dans un panneau avec AutoScroll défini sur True. Quand une zone de texte a le focus et que je défile avec la molette de la souris, le panneau défile, quand une combobox a le focus et que je défile avec la molette de la souris, l'élément sélectionné dans la combobox change.Modification du comportement de MouseWheel d'une zone de liste déroulante

Je suis sûr que c'est le comportement prévu, mais c'est quelque chose que je voudrais changer, de sorte que tous les événements mousewheel font défiler le panneau.

Pour ce faire, je traitais 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 

Est-il possible de le faire sans avoir recours à l'appel d'une méthode privée sur un contrôle par réflexion ?

Répondre

2

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