RSS
StartseiteKnowledge LibraryTop 10Impressum

5.9 Wie kann ich den ListIndex einer Combo-/ ListBox setzen ohne das Click - Ereignis auszulösen?

VB5-VB6

Von:

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