|
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
|
|
|
|
|
Windows-Version |
98/SE |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
|
Download (7,4 kB)
|
Downloads bisher: [ 604 ]
|
|
|