VB-Homepage Tipp 393

Combobox mit integrieter Checkbox

Immer mehr wirklich gute, aber auch eine ganze Menge unnützer Controls schwirren im Internet umher, oftmals nur mit einer einzigen Funktion, so wie zum Beispiel eine Combobox mit einer vorangestellten Checkbox.
Durchaus eine gewollte Funktion, um vielleicht die Auswertung des Checkboxwertes zu aktivieren bzw. deaktivieren.
Aber es bedarf dazu keines Extra Controls, wie nachfolgender Code beweist.

1. Benötigen Sie auf Ihrer Form
eine Combobox (Combo1) , eine Checkbox (Check1) und ein Labelobjekt (Label1),
das Label dient uns nur zur visuellen Auswertung des Status.

2. Allgemein/Deklarationen
Option Explicit
Private Const EC_LEFTMARGIN = &H1
Private Const EC_RIGHTMARGIN = &H2
Private Const EC_USEFONTINFO = &HFFFF&
Private Const EM_SETMARGINS = &HD3&
Private Const EM_GETMARGINS = &HD4&

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

3. Allgemein/AddCheckToCombo
Private Sub AddCheckToCombo(ByRef chkThis As CheckBox, ByRef cboThis As ComboBox)
Dim lhWnd As Long
Dim lMargin As Long

lhWnd = FindWindowEx(cboThis.hwnd, 0, "EDIT", vbNullString)

If (lhWnd <> 0) Then
   lMargin = chkThis.Width \ Screen.TwipsPerPixelX + 2
   SendMessageLong lhWnd, EM_SETMARGINS, EC_LEFTMARGIN, lMargin
   chkThis.BackColor = cboThis.BackColor
   chkThis.Move cboThis.Left + 3 * Screen.TwipsPerPixelX, cboThis.Top + 2 *     Screen.TwipsPerPixelY, chkThis.Width, cboThis.Height - 4 *     Screen.TwipsPerPixelY
   chkThis.ZOrder
End If
End Sub

4. Form_Load
Dim i As Integer

'Check1 Eigenschaft setzen
Check1.Caption = ""
Check1.Width = 255

'Aufruf der Funktion / Übergabe der Objekte
AddCheckToCombo Check1, Combo1

'Füllen Combobox
For i = 1 To 20
Combo1.AddItem "Eintrag " & i & " übernehmen"
Next i

'erster Eintrag wird angezeigt
Combo1.Text = Combo1.List(0)

'Auswertung
Check1_Click

5. Check1_Click
'nur zur Auswertung
If Check1.Value = 1 Then
   Label1.Caption = "Eintrag ausgewählt"
Else
   Label1.Caption = "Eintrag nicht ausgewählt"
End If

6. Wenn Sie nun Ihr Projekt starten, dann wird innerhalb der Combobox eine Checkbox angezeigt. Markieren/Demarkieren Sie die Checkbox wird Ihnen das Ergebnis im Labelobjekt angezeigt. Genau so gut, könnte hier der Benutzer des Programmes angeben, ob diese Combobox ausgewertet werden soll oder nicht.
Oder auch ganz was anderes .....

Tipp-Download

Quelle : Steve McMahon - steve@vbaccelerator.com

Zurück zur Übersichtsseite