Tipp 0076 ComboBox im FlatStyle anzeigen
Autor/Einsender:
Datum:
  Klaus D. Raudszus
16.05.2005
Entwicklungsumgebung:   VB.Net 2003
Framework:   1.1
Die FlatStyle fehlt in den Eigenschaften der ComboBox. Wie man dennoch über eine Komponentenklasse einer ComboBox einen FlatStyle geben kann, und zwar auf eine elegant kurze Art und Weise, demonstriert dieser Tipp.
Eine Klasse wird zu einer Komponente, wenn sie einem Standard für die Komponenteninteraktion entspricht. Dieser Standard wird über die IComponent-Schnittstelle bereitgestellt. Das .NET-Framework stellt die IComponent-Schnittstelle und die Component-Basisklasse zur Verfügung, die die Erstellung von Komponenten vereinfachen, die in der Entwicklungsumgebung gut funktionieren. Darüber hinaus werden die Klassen UserControl und Control bereitgestellt, die die Erstellung visueller Komponenten erleichtern.
Im Tipp ist das Entscheidende das Zusammenspiel der Methoden WndProc mit Message und ControlPaint. Die ComboBox.WndProc-Methode überschreibt dabei die Control.WndProc-Methode. Die WndProc-Methode dient zum Behandeln von in der Message-Struktur angegebenen Betriebssystemmeldungen. Alle Meldungen werden an die WndProc-Methode gesendet, nachdem sie gefiltert wurden. Die WndProc-Methode entspricht genau der WindowProc-Funktion von Windows.
 
Option Strict On
Option Explicit On

Public Class comFlatComboBox
  Inherits ComboBox

  Private Const WM_PAINT As Integer = &HF
  Private Const WM_NCPAINT As Integer = &H85

  Private m_bolMouseDown As Boolean = False
  Private m_RectButton As Rectangle

  Public Sub New()
  End Sub

  Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
    MyBase.OnMouseUp(e)
    m_bolMouseDown = False
    Invalidate()
  End Sub

  Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
    MyBase.OnMouseDown(e)
    m_RectButton = New Rectangle(Width - 18, 0, 17, Height)
    If e.X >= m_RectButton.Left Then
      m_bolMouseDown = True
      Invalidate()
    End If
  End Sub

  Protected Overrides Sub OnResize(ByVal e As EventArgs)
    MyBase.OnResize(e)
    Invalidate()
  End Sub

  Protected Overrides Sub WndProc(ByRef m As Message)
    Dim g As Graphics = Graphics.FromHwnd(Handle)

    Select Case m.Msg
      Case WM_NCPAINT
        g.Clear(BackColor)
      Case WM_PAINT
        MyBase.WndProc(m)
        g.DrawRectangle(New Pen(BackColor, 2), _
              New Rectangle(2, 2, Width - 4, Height - 4))
        m_RectButton = New Rectangle(Width - 18, 0, 17, Height)
        If m_bolMouseDown Then
          ControlPaint.DrawComboButton(g, m_RectButton, _
                ButtonState.Pushed)
        Else
          ControlPaint.DrawComboButton(g, m_RectButton, _
                ButtonState.Flat)
        End If
    End Select
    MyBase.WndProc(m)
    g.Dispose()
  End Sub
End Class
 
Weitere Links zum Thema
ComboBox - Farbige Einträge

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (7,4 kB) Downloads bisher: [ 604 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Montag, 23. Januar 2012