Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Тысячи записей в ListBox / 5 сообщений из 5, страница 1 из 1
25.09.2008, 18:26
    #35560611
Djay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тысячи записей в ListBox
Что использовать вместо листбокса для 100 000 записей?

Лист бокс столько не умеет... да и на старых тачках повиснет просто...

Нужно замутить словарь. Словарная база хранится в файле excel.

я новичок в VB :-[
...
Рейтинг: 0 / 0
25.09.2008, 21:06
    #35560833
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тысячи записей в ListBox
В ListBox никто не сует 100,000 записей. Это безумие. Пользователь одномоментно видит 20-25 записей. Вот столько в него и суют. А остальное - в базе, вынимаемое постранично в процессе скроллинга.
...
Рейтинг: 0 / 0
25.09.2008, 21:20
    #35560841
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тысячи записей в ListBox
Пример с MSHFlexGrid вместо ListBox. Брось на форму грид MSHFlexGrid1 (2 колонки, 2 строки, по одной фиксированной), TextBox txtSearch, и две Command Button: cmdLoadFirstPage и cmdSearch.

В модуль формы скопируй код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Option Explicit

Private Const PAGE As Integer =  20 
Private mintPagedArray() As Integer
Private mlngPages As Long

Private Sub cmdLoadFirstPage_Click()
    PopulatePagedArray
    AddPage
    MSHFlexGrid1.RemoveItem  1 
    cmdLoadFirstPage.Enabled = False
End Sub

Private Sub cmdSearch_Click()
    MSHFlexGrid1.TopRow = CLng(txtSearch.Text)
End Sub

Private Sub MSHFlexGrid1_Scroll()
   If MSHFlexGrid1.RowIsVisible(mlngPages) = False Then
        PopulatePagedArray
        AddPage
   End If
End Sub

Private Sub AddPage()
    Dim i As Long
    
    If (mlngPages -  1 ) * (PAGE) <= MSHFlexGrid1.TopRow Then
        If mlngPages * PAGE < UBound(mintPagedArray) Then
            mlngPages = mlngPages +  1 
        
            For i = (mlngPages -  1 ) * PAGE To mlngPages * PAGE -  1 
                MSHFlexGrid1.AddItem vbTab & mintPagedArray(i)
            Next i
        End If
    End If
    
End Sub

Private Sub PopulatePagedArray()
    Dim i As Long
    
    ReDim Preserve mintPagedArray((mlngPages +  1 ) * PAGE)
    
    For i = mlngPages * PAGE +  1  To (mlngPages +  1 ) * PAGE
        mintPagedArray(i -  1 ) = i
    Next i
        
End Sub

Я написал этот код несколько лет назад, он позволяет бесконечно добавлять в грид строки с данными и осуществлять поиск строки с заданным значением поля. Там можно манипуляции с растущим массивом подменить на послeдовательный выбор данных из книги Excel.

Успехов
...
Рейтинг: 0 / 0
26.09.2008, 10:39
    #35561370
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тысячи записей в ListBox
VladConnЭто безумие.Это Спарта )))
...
Рейтинг: 0 / 0
26.09.2008, 11:01
    #35561433
Djay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тысячи записей в ListBox
Спасибо дружище! Выручил!!

Я сделал еще проще используя твою идею! Тот же листбокс оставил, но добавил к нему VScroll и сделал чтобы данные из екзеля извлекались по 20-25 записей согласно значению VScroll.Value
т.е. +-10 слов от VScroll.Value.

Теперь возникла еще одна проблема... Как сохранить форматирование которое было в екселе при выводе перевода в текст бокс. :( цвет заливки, цвет шрифта, жирность отдельных символов и т.д.
Но пожалуй я для этого создам новую тему.

Еще раз спасибо! :)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Тысячи записей в ListBox / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]