Ändern des Mausrad Verhalten eines Combobox
-
08-07-2019 - |
Frage
Ich habe ein Usercontrol Textfelder und Comboboxen und dieses Usercontrol enthält, in einem Gremium enthalten ist, mit Autoscroll auf True gesetzt.
Wenn ein Textfeld den Fokus hat und ich scrollen mit dem Mausrad, dann die Platte rollen, wenn eine Combobox den Fokus hat und ich scrollen mit dem Mausrad dann das ausgewählte Element in der Combobox Änderungen.
Ich bin sicher, dass dies das gewünschte Verhalten, aber es ist etwas, was ich ändern möchte, so dass alle Mausrad Ereignisse das Panel scrollen.
Um dies zu tun, ich die Meldung WM_MOUSEWHEEL am Umgang in der WndProc-Methode in einer ComboBox Unterklasse wie folgt:
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
Gibt es eine Möglichkeit, dies über ein eigenes Verfahren zum Aufruf auf einer Steuerung über Reflexion ohne Rückgriff zu tun?
Lösung
Sie könnten die Win32 SendMessage
Funktion verwenden Sie den Inhalt Ihrer Nachricht, m
weiterleiten, Parent.Handle
.