Страница: 1 |
Страница: 1 |
Вопрос: Выделение всех элементов LisView
Добавлено: 25.03.09 15:45
Автор вопроса:
fluke | ICQ: 318170731
Есть ListView в виртуальном режиме. как выделить все элементы в списке?. ListView.SelectedIndices.Add("Index") и ListView.Items("Index").Selected = True, по причине низкой производительности, не подходит.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа: Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #1
Добавлено: 25.03.09 20:45
Если честно, а есть другой способ? Я выделение сделал так.
Номер ответа: 2
Автор ответа: fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #2
Добавлено: 25.03.09 23:57
Нет, этот вариант не подходит, ListView в виртуальном режиме, а следовательно свойство Items, заблокировано. Даже если не юзать VirtualMode, перебор большого списка в цикле, уйдет в ступор..
Номер ответа: 3
Автор ответа: Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #3
Добавлено: 26.03.09 00:38
А какова основная цель виртуального листвьюв. Если перегнать данные с него в двухмерный массив допусти ил во что то более гипкое?
Номер ответа: 4
Автор ответа: fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #4
Добавлено: 26.03.09 10:11
Более гибкое ListView, интересно что? То что он может выделять все элементы, причем без перебора всех элементов, можно судить из реакции на нажатие клавиш (Home, Shift+End).
Номер ответа: 5
Автор ответа: mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #5
Добавлено: 26.03.09 12:21
Надо отправить этому ListView сначала Home, Потом Shift+End:
How to: Simulate Mouse and Keyboard Events in Code (.NET)
http://msdn.microsoft.com/en-us/library/ms171548(VS.80).aspx
Номер ответа: 6
Автор ответа: fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #6
Добавлено: 26.03.09 12:53
Пробовал, но не то. Вот к примеру, список из 10 тыс. активный элемент где-то в середине, я отправляю клавишу Home, список прокручивается в начало, потом Shift+End, список прокручивается в конец, и наконец делаю опять активным элемент, выбранный до этого. Что из этого получается, я думаю рассказывать не стоит. Для VB6.0 нарыл пример отправки сообщения элементу ListView
Call SendMessage(ListView1.hwnd, LVM_SETITEMSTATE, -1, LV), и как утверждает автор, работает. Но в .Net, не катит
Номер ответа: 7
Автор ответа: fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #7
Добавлено: 26.03.09 12:55
Или я что-то не то делаю. Но если с помощью клавиш, это сделать можно, то по логике вещей, это можно сделать и без отправки клавиш, но как?
Номер ответа: 8
Автор ответа: mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #8
Добавлено: 26.03.09 16:10
Не катит потому, что неуправляемый код или потому, что не вписывается в твой стандарт оформления кода? Вообще-то должно работать, как утверждается в MSDN Library:
Parameters
i Index of the list-view item. If this parameter is -1, then the state change is applied to all items.
pitem Pointer to an LVITEM structure.
Номер ответа: 9
Автор ответа: mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #9
Добавлено: 26.03.09 16:18
P.S. Можешь сделать класс-обертку к этому вызову, чтобы в дальнейшем не загружать себя этим вопросом, просто использовать готовый программный блок по работе с ListView.
Номер ответа: 10
Автор ответа: fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #10
Добавлено: 26.03.09 19:54
Все разобрался, всем спасибо за помощь
Номер ответа: 11
Автор ответа: mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #11
Добавлено: 27.03.09 13:08
Всегда пожалуйста. Над интересным вопросом интересно подумать. Хоть и решение ты нашел сам. Разреши поинтересоваться, для чего все это, что за программку вы создаешь, fluke?
Номер ответа: 12
Автор ответа: fluke
ICQ: 318170731
Вопросов: 15
Ответов: 96
Профиль | | #12
Добавлено: 27.03.09 15:10
Пишу я не прогу, а дополнение к существующей программе (бухучет). Дополнение работает с базой данных, конечно можно использовать DataView в нем даже Ctrl+A реализован, но мне больше нравиться ListView, который и использую для отображения 100-500 записей, но иногда необходимо и пару тысяч отобразить. Естественно тока VirtualMode. Но стандартный механизм управления состоянием Item-мов, для такого количества записей не подходит.