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

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

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

я новичок в VB :-[
...
Рейтинг: 0 / 0
Тысячи записей в ListBox
    #35560833
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ListBox никто не сует 100,000 записей. Это безумие. Пользователь одномоментно видит 20-25 записей. Вот столько в него и суют. А остальное - в базе, вынимаемое постранично в процессе скроллинга.
...
Рейтинг: 0 / 0
Тысячи записей в ListBox
    #35560841
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример с 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
Тысячи записей в ListBox
    #35561370
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnЭто безумие.Это Спарта )))
...
Рейтинг: 0 / 0
Тысячи записей в ListBox
    #35561433
Djay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо дружище! Выручил!!

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

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

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


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