Visual Basic, .NET, ASP, VBA, VBScript
 
  Библиотека кодов  
  Стандартные элементы >>> ListBox  
     
  API-переброс данных из массива в элемент ListBox  
  Как вы знаете, у элементов ListBox или ComboBox существует метод AddItem, который просто-напросто добавляет в выбранный контрол некие значения, определяемые пользователем. Но с использованием API функций можно ускорить процесс занесения данных в указанные выше элементы. Как я это определил? В данном примере вам понадобятся 4 элемента CommandButton, а также элемент ListBox (или ComboBox). При нажатии на кнопку 3, вы получите время загрузки 1000 элементов в ЛистБокс с использованием метода AddItem, при нажатии на кнопку 4 - при использовании API-функций. Заметили разницу? Ну а первые две кнопки всего лишь показывают работу функции ArrayToListBox.

Что еще может функция ArrayToListBox? Как вы видите, в параметрах функции 5 элементов. Два обязательных (контрол и массив данных), третий параметр при значении True очищает список элементов, а четвертый и пятый параметры всего лишь определяют, с какого элемента из массива данных (по порядковому номеру) начинать заносить в элемент ListBox и каким элементом (по порядковому номеру) заканчивать.


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
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Const LB_ADDSTRING = &H180
Private Const LB_RESETCONTENT = &H184
Private Const CB_ADDSTRING = &H143
Private Const CB_RESETCONTENT = &H14B
Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim adr()

Sub ArrayToListBox(ctrl As Object, arr As Variant, Optional clearIt As Boolean, Optional ByVal First As Variant, Optional ByVal Last As Variant)
Dim msgReset As Long
Dim msgAdd As Long
Dim hWnd As Long
Dim index As Long
If TypeOf ctrl Is ListBox Then
msgReset = LB_RESETCONTENT
msgAdd = LB_ADDSTRING
ElseIf TypeOf ctrl Is ComboBox Then
msgReset = CB_RESETCONTENT
msgAdd = CB_ADDSTRING
Else
' none of the above, exit
Exit Sub
End If
If IsMissing(First) Then First = LBound(arr)
If IsMissing(Last) Then Last = UBound(arr)
' disable redrawing
hWnd = ctrl.hWnd
LockWindowUpdate hWnd
' clear control if requested
If clearIt Then
SendMessage hWnd, msgReset, 0, 0
End If
' add all items in the array
For index = First To Last
SendMessage hWnd, msgAdd, 0, ByVal CStr(arr(index))
Next
' re-enable redrawing
LockWindowUpdate 0
End Sub

Private Sub Command1_Click()
Call ArrayToListBox(List1, adr, False, 2, 9)
End Sub
Private Sub Command2_Click()
Call ArrayToListBox(List1, adr, True, 11, 18)
End Sub

Private Sub Command3_Click()
t1 = GetTickCount
List1.Clear
For i = 1 To 1000
List1.AddItem adr(i)
Next
t2 = GetTickCount
MsgBox t2 - t1
End Sub

Private Sub Command4_Click()
t1 = GetTickCount
Call ArrayToListBox(List1, adr, True)
t2 = GetTickCount
MsgBox t2 - t1
End Sub

Private Sub Form_Load()
ReDim adr(1000)
For i = 1 To 1000
adr(i) = Str(i)
Next i
List1.AddItem "--"
List1.AddItem "--"
List1.AddItem "--"
End Sub
 
     
  VBNet online (всего: 51566)  
 

Логин:

Пароль:

Регистрация, забыли пароль?


В чате сейчас человек
 
     
  VBNet рекомендует  
   
     
  Лучшие материалы  
 
ActiveX контролы (112)
Hitman74_Library (36119)
WindowsXPControls (20739)
FlexGridPlus (19374)
DSMAniGifControl (18295)
FreeButton (15157)
Примеры кода (546)
Parol (18027)
Passworder (9299)
Screen saver (7654)
Kerish AI (5817)
Folder_L (5768)
Статьи по VB (136)
Мое второе впечатление... (11236)
VB .NET: дорога в будущее (11161)
Основы SQL (9225)
Сообщения Windows в Vi... (8788)
Классовая теория прогр... (8619)
 
     
Техническая поддержка MTW-хостинг | © Copyright 2002-2011 VBNet.RU | Пишите нам