2009-05-07 5 views
0

Ich habe ein UserControl, das TextBoxes und ComboBoxes enthält, und dieses UserControl ist in einem Panel enthalten, in dem AutoScroll auf True gesetzt ist.Ändern des MouseWheel-Verhaltens einer Combobox

Wenn ein Textfeld den Fokus hat und ich mit dem Mausrad blättern, scrollt das Panel, wenn ein Combobox den Fokus hat und ich mit dem Mausrad blättern dann ändert sich das ausgewählte Element in der Combobox.

Ich bin mir sicher, dass dies das beabsichtigte Verhalten ist, aber es ist etwas, das ich ändern möchte, so dass alle Mausrad Ereignisse das Panel scrollen.

Um dies zu tun, ich in einer ComboBox Unterklasse die WM_MOUSEWHEEL Nachricht in der WndProc Methode am Umgang 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 ?

Antwort

2

Sie können die Win32 SendMessage Funktion verwenden, um den Inhalt Ihrer Nachricht, m, an Parent.Handle weiterzuleiten.