5.9 Wie kann ich den ListIndex einer Combo-/ ListBox setzen ohne das Click - Ereignis auszulösen?
VB5-VB6
Von: Volker Schmid
Wenn Sie per Programmcode einen Eintrag einer ComboBox oder ListBox selektieren wollen, wird auch gleichzeitig das Click - Ereignis ausgelöst. Manchmal ist es sinnvoll, meistens aber doch störend. Mit einem kleinen API Kniff, können Sie dieses Verhalten umgehen. Dazu wird die aktuelle Auswahl über SendMessage gesetzt, statt über die ListIndex-Eigenschaft. Für die ComboBox benötigen Sie hier die Konstante CB_SETCURSEL bzw. für die ListBox analog LB_SETCURSEL:
' --- Deklaration --- Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Const CB_SETCURSEL As Long = &H14E Private Const LB_SETCURSEL As Long = &H186 Public Sub CBListIndex(ByRef Combo As ComboBox, _ ByVal Index as Integer) SendMessage Combo.hWnd, CB_SETCURSEL, CLng(Index), ByVal 0& End Sub Public Sub LBListIndex(ByRef ListBox As ListBox, _ ByVal Index as Integer) SendMessage ListBox.hWnd, LB_SETCURSEL, CLng(Index), ByVal 0& End Sub ' Setzt den ListIndex einer ComboBox auf 2: CBListIndex Combo1, 2 ' Setzt den ListIndex einer ListBox auf 5: LBListIndex List1, 5