Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0067: Listindex in einer ListBox setzen ohne Klickevent auszulösen

 von 

Beschreibung 

Immer wieder ärgerlich das Rumgehampele mit dem Setzen des ListBoxIndexes bei gleichzeitiger Unterdrücken des dadurch ausgelösten Events. Linderung bringt folgender API-Aufruf der eben solche Ereignisse nicht auftreten läßt. Das ganze funktioniert natürlich auch mit einer Combobox.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

SendMessageA (SendMessage)

Download:

Download des Beispielprojektes [2,18 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei PROJECT1.VBP -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Kombinationsliste "Combo1"
' Steuerelement: Listen-Steuerelement "List1"

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
        As Long, ByVal wParam As Long, ByVal lParam As _
        Long) As Long

Const LB_SETCURSEL = &H186
Const CB_SETCURSEL = &H14E

Dim Z%

Private Sub Command1_Click()
 Z = Z + 1
 If Z > List1.ListCount - 1 Then Z = 0
 SendMessage List1.hwnd, LB_SETCURSEL, Z, 0&
 SendMessage Combo1.hwnd, CB_SETCURSEL, Z, 0&
End Sub

Private Sub Command2_Click()
 Z = Z - 1
 If Z < 0 Then Z = List1.ListCount - 1
 SendMessage List1.hwnd, LB_SETCURSEL, Z, 0&
 SendMessage Combo1.hwnd, CB_SETCURSEL, Z, 0&
End Sub

Private Sub Form_Load()
  List1.AddItem "Gurken"
  List1.AddItem "Bohnen"
  List1.AddItem "Salat"
  List1.AddItem "Erbsen"
  
  Combo1.AddItem "Gurken"
  Combo1.AddItem "Bohnen"
  Combo1.AddItem "Salat"
  Combo1.AddItem "Erbsen"
  
  Z = -1
End Sub

Private Sub List1_Click()
  MsgBox ("Klick")
End Sub

Private Sub Combo1_Click()
  MsgBox ("Klick")
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei PROJECT1.VBP --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Peter am 13.01.2007 um 17:31

Wenn ListBox.Style = 1 (Kontrollkästchen) funktioniert nicht.

Kommentar von Hans Dieter Spengler am 31.10.2003 um 08:44

Gibt es auch eine Möglichkeit, um nach dem LB_SETCURSEL ein Click-Event auszulösen ???

Kommentar von Ahlers am 03.01.2003 um 00:02

Klappt super!

Mann, was hab ich für'n Code produziert, um dieses verdammte Klickereignis kaltzustellen!
Vielen Dank!