Tipp 0531 ComboBox mittels API blitzschnell befüllen
Autor/Einsender:
Datum:
  Detlev Schubert
12.05.2007
Entwicklungsumgebung:   VB 6
Standardmäßig wird die ComboBox mit der entsprechenden Eigenschaft AddItem befüllt, und dies ist für den Normalfall mit bis zu etwa 50 Einträgen auch völlig ausreichend. Muss allerdings eine ComboBox mit mehreren hundert oder gar tausend Einträgen befüllt werden, wird dies jedoch zu einem Geduldsspiel.
Mit einem Griff zur universellen API-Funktion SendMessage und den passenden Parametern lässt sich dieser Füll-Vorgang sogar mit Zuweisung des ItemData in rund einem Zehntel der Zeit erreichen.
 
Option Explicit

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

 'Konstanten für die ComboBox
Private Const CB_ADDSTRING = &H143
Private Const CB_SETITEMDATA = &H151

Private Sub Command1_Click()
  Dim lngIndex      As Long
  Dim lngDataIndex  As Long

  For lngIndex = 1 To 5000
     strItemText = "Eintrag " & CStr(lngIndex)
      'Neuen Eintrag in der ComboBox hinzufügen
     lngDataIndex = SendMessage(Combo1.hWnd, CB_ADDSTRING, 0, _
        ByVal strItemText)
      'ItemData des neuen Items setzen
     SendMessage Combo1.hWnd, CB_SETITEMDATA, lngDataIndex, _
        ByVal lngIndex
  Next

  'Auf den 1. Eintrag setzen
  Combo1.ListIndex = Combo1.TopIndex
End Sub
 
Anmerkung
Der Download enthält auch den Code der API-Variante für die ListBox. Allerdings konnte hier bei einer 3 GHz-CPU kein nennenswerter Geschwindigkeitsvorteil festgestellt werden.

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3 kB) Downloads bisher: [ 446 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 14. Mai 2011