|
Das Listenfeld einer ComboBox können Sie auch manuell öffnen
oder schließen, indem Sie die Nachricht CB_SHOWDROPDOWN
mittels der API-Funktion SendMessage
an die ComboBox senden. Verwenden Sie die hier gezeigt Hilfsfunktion
DropDown, brauchen Sie dieser lediglich die betreffende ComboBox zu
übergeben, um das Listenfeld zu öffnen. Übergeben Sie hingegen
zusätzlich im optionalen Parameter ShowHide den Wert False, wird
das Listenfeld geschlossen. Sie können die Funktion unbesorgt
mehrfach mit dem gleichen Wert für ShowHide aufrufen.
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Sub DropDown(Combo As ComboBox, _
Optional ByVal ShowHide As Boolean = True)
Const CB_SHOWDROPDOWN = &H14F
SendMessage Combo.hwnd, CB_SHOWDROPDOWN, ShowHide, 0
End Sub
So kann etwa das Listenfeld automatisch geöffnet werden, wenn
die ComboBox den Fokus erhält:
Private Sub Combo1_GotFocus()
DropDown Combo1
End Sub
Sie können das Listenfeld auch automatisch öffnen, sobald der
Anwender Zeichen eingibt. Damit die Escape-Taste jedoch weiterhin
ihre Funktion beibehält, das Listenfeld zu schließen, müssen Sie
diese jedoch ausnehmen:
Private Sub Combo1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyEscape
Case Else
DropDown Combo1
End Select
End Sub
Senden Sie die Nachricht CB_GETDROPPEDSTATE
an die ComboBox, erhalten Sie die Information, ob das Listenfeld
aktuell geöffnet oder geschlossen ist. Das Visual Basic-Ereignis DropDown
der ComboBox informiert Sie nämlich nur über das Öffnen des
Listenfeldes, nicht aber über das Schließen und auch nicht über
den aktuellen Zustand.
Public Function IsDropped(Combo As ComboBox) As Boolean
Const CB_GETDROPPEDSTATE = &H157
IsDropped = CBool(SendMessage(Combo.hwnd, _
CB_GETDROPPEDSTATE, 0, 0))
End Function

|