2009-05-27 7 views
3

ich die WndProc des ComboBox außer Kraft gesetzt habe, und ich meine eigene Combo-Box am zeichnen, ein Code-Snippet ist unten:Zwingende Farbe von Combobox mit WndProc

Protected Overrides Sub WndProc(ByRef m As Message) 

    MyBase.WndProc(m) 
    Select Case m.Msg 
     Case &HF 

      Dim g As Graphics = Me.CreateGraphics 

      If ComboBoxRenderer.IsSupported Then 
       Dim pTextBoxRect As New Rectangle(Me.ClientRectangle.X, Me.ClientRectangle.Y, Me.ClientRectangle.Width, Me.ClientRectangle.Height) 
       ComboBoxRenderer.DrawTextBox(g, pTextBoxRect, _tbState) 
       ' .... and so on 
    End Select 
End Sub 

Obwohl die alte Steuerung noch gemalt wird als meine Die gezeichnete Kombinationsbox überlappt nur die alte Zeichnung. Gibt es eine Möglichkeit, das Standard-Kombinationsfeld nicht zu zeichnen?

Danke, Rob

+0

Warum das wndproc überschreiben? Warum überschreibe ich nicht einfach die OnPaint-Methode? – Adrian

+0

... oder verwenden Sie eine reguläre ComboBox mit den OwnerDraw-Funktionen? –

+0

Adrian - Die OnPaint-Methode für ein Kombinationsfeld zeichnet das Kombinationsfeld nicht. Fredrik - Ich benutze eine normale Combo-Box und die OwnerDraw Dies ist eine regelmäßige Combobox und ich überschreibe die WndProc-Methode, um das Kombinationsfeld in Visual Styles anzuzeigen, wie ich dies auf Anwendungsebene nicht einstellen kann, weil dies ein Plugin für eine Anwendung. – rob

Antwort

2

Die Methode, die Sie verwenden, ist der einzige Weg, es zu tun zu bekommen, aber du hast recht, zieht es über den oberen Teil der Standard-Combobox, und es gibt keinen Weg, um dieses, während immer noch Verwenden des Combobox-Steuerelements.

Um wirklich eine benutzerdefinierte Combobox zu erhalten, müssen Sie im Objektbaum eine Ebene höher gehen, aber dann müssen Sie fast die gesamte Funktionalität der Combobox neu erstellen.

+0

Danke für die Bestätigung von Stewbob Ich hatte eine Ahnung, dass das der Fall sein würde. – rob