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 |