Страница: 1 |
Страница: 1 |
Вопрос: Виртуальный режим ListView
Добавлено: 04.06.07 11:26
Автор вопроса: fluke | ICQ: 318170731
Есть Листвью в виртуальном режиме, на событие RetrieveVirtualItem происходит заполнение Item-ом, но даже если фокус стоит на ListView, событие RetrieveVirtualItem продолжает, даже если все записи заполнены! у кого есть соображения?
Public Class Form1
Private Sub ListView1_RetrieveVirtualItem(ByVal sender As Object, ByVal e As System.Windows.Forms.RetrieveVirtualItemEventArgs) Handles ListView1.RetrieveVirtualItem
Static Dim n As Integer
n = n + 1
TextBox1.Text = n.ToString
e.Item = New ListViewItem(e.ItemIndex.ToString)
e.Item.SubItems.Add(e.ItemIndex.ToString)
e.Item.SubItems.Add(e.ItemIndex.ToString)
e.Item.SubItems.Add(e.ItemIndex.ToString)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListView1.VirtualListSize = 100
End Sub
End Class
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #1
Добавлено: 04.06.07 11:39
проблема в том, что идет постояный вызов обновления элементов, что с моей точки зрения не есть правильно, или я ошибаюсь?
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 04.06.07 13:40
Да вроде всё логично. Если у тебя миллион записей, то не хранить же
весь миллион в памяти. По мере надобности подгружает, как стало
ненужным - выгружает.
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 04.06.07 13:42
Могу посоветовать сделать что-то типа кеша - при загрузке записей
сохранять их в кеш, затем если что-то понадобилось, то сначала искать
в кеше, и только если там данных не оказалось, грузить из источника
данных. Пи этом было бы разумно контролировать объем кеша, чтобы он
сильно не разрастался - периодически убивать старые элементы.
Номер ответа: 4
Автор ответа:
fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #4
Добавлено: 04.06.07 19:15
проблема не в кеше. меня интересует один но. когда меняю размер списка VirtualListSize происходит заполнение видимых итемов, но по идеи он после заполнения должен прекратиться, но как не странно событие RetrieveVirtualItem не прекращается. фокус стоит на одном итеме, а лист продолжает делать рефреш. тобишь n = n + 1. и так пока листвью не потеряет фокус
Номер ответа: 5
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #5
Добавлено: 04.06.07 19:23
там есть дргое событие, кажется..., может ItemSelectionChanged...
Номер ответа: 6
Автор ответа:
fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #6
Добавлено: 05.06.07 12:49
ItemSelectionChanged - происходит когда юзер кликает на итемы или выделяет их. RetrieveVirtualItem - когда рефреш окна, ну там скрол и т.д.
Номер ответа: 7
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #7
Добавлено: 05.06.07 22:49
Номер ответа: 8
Автор ответа:
fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #8
Добавлено: 06.06.07 10:30
Private Sub ListView1_RetrieveVirtualItem(ByVal sender As Object, ByVal e As System.Windows.Forms.RetrieveVirtualItemEventArgs) Handles ListView1.RetrieveVirtualItem
Static Dim n As Integer
n = n + 1
TextBox1.Text = n.ToString
e.Item = New ListViewItem(e.ItemIndex.ToString)
e.Item.SubItems.Add(e.ItemIndex.ToString)
e.Item.SubItems.Add(e.ItemIndex.ToString)
e.Item.SubItems.Add(e.ItemIndex.ToString)
End Sub
Номер ответа: 9
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #9
Добавлено: 06.06.07 21:03
http://msdn2.microsoft.com/en-us/library/system.windows.forms.listview.retrievevirtualitem.aspx
вобщем здесь http://translate.google.com/translate?hl=ru&sl=en&u=http://blogs.msdn.com/cumgranosalis/archive/2006/03/06/VirtualListViewUsage.aspx&sa=X&oi=translate&resnum=3&ct=result&prev=/search%3Fq%3DRetrieveVirtualItem%26hl%3Dru%26client%3Dopera%26rls%3Dru%26hs%3Dmby хорошо написано,
хорошая вешь ))