![]() |
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 |
|
|
|
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: [ 441 ]
|
|
|