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?

War es hilfreich?

Lösung

Sie könnten die Win32 SendMessage Funktion verwenden Sie den Inhalt Ihrer Nachricht, m weiterleiten, Parent.Handle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top