Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
.NET 4.x

Нужен пример работы с ListView в VirtualMode

25.05.2014, 20:06. Показов 4952. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Покажите неразумному пример работы с listView'ом в VirtualMod'e. Наполнение будет проходить с List'a.
Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2014, 20:06
Ответы с готовыми решениями:

ListView в режиме VirtualMode, не отображаются значки
Здравствуйте. Первоначально я работал с ListView в обычном режиме, и у элементов списка значки отображались. Сейчас включил виртуальный...

Подергивание ListView в режиме VirtualMode при добавлении элемента
Здравствуйте. Для начала стоит заметить, что более забагованного контрола в винформах встречать не приходилось. Причем одни и те же...

Нужен пример по собственной отрисовке ListView
Приветствую, ищу доходчивый пример по listview ownerdraw. Лучше на асм, но можно и на Си. Ни у кого не завалялся в закромах ?

18
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.05.2014, 20:55
Лучший ответ Сообщение было отмечено KriBetko как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private List<string> _listViewData = new List<string>();
        private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
        {
            if (e.ItemIndex >= 0 && e.ItemIndex < _listViewData.Count)
            {
                e.Item = new ListViewItem(_listViewData[e.ItemIndex]);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            _listViewData.AddRange(Enumerable.Range(0, 10).Select(s => s.ToString()));
            listView1.VirtualListSize = _listViewData.Count; // set the list size
        }
2
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
25.05.2014, 21:49  [ТС]
Spawn, а можно пару комментариев? А то мало что понял
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.05.2014, 21:56
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        // Коллекция с данными (string)
        private List<string> _listViewData = new List<string>();
        // подписываем ListView на событие RetrieveVirtualItem 
        private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
        {
            // Если индекс в границах нашей коллекции
            if (e.ItemIndex >= 0 && e.ItemIndex < _listViewData.Count)
            {
                // добавляем новый элемент в коллекцию
                e.Item = new ListViewItem(_listViewData[e.ItemIndex]);
            }
        }
 
        // кнопка добавления элементов в коллекцию
        private void button1_Click(object sender, EventArgs e)
        {
            // Добавляем 10 новых элементов
            _listViewData.AddRange(Enumerable.Range(0, 10).Select(s => s.ToString()));
            // Изменяем размер виртуального списка чтобы отработало событие RetrieveVirtualItem
            listView1.VirtualListSize = _listViewData.Count; // set the list size
        }
3
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
26.05.2014, 00:49  [ТС]
Spawn, допустим.
А как вызывается событие RetrieveVirtualItem? А то итемы не добавляются
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.05.2014, 00:59
KriBetko, автоматически при изменении размера виртуального списка (VirtualListSize). Подробнее о событии.

В примере выше - после нажатия на кнопочку на форме я добавляю в коллекцию 10-к новых элементов, после чего изменяю размер виртуального списка и ListView поднимает событие RetrieveVirtualItem чтобы запросить новые элементы.
1
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
26.05.2014, 01:14  [ТС]
Spawn, ага, "просто добавь воды". А как отобразить итемы?
Мудреная система.
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.05.2014, 06:53
KriBetko, ничего мудрёного в ней нет... Итемы добавляются и отображаются...
Вложения
Тип файла: zip ListViewSample.zip (10.7 Кб, 74 просмотров)
2
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
26.05.2014, 10:01  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
KriBetko, ничего мудрёного в ней нет... Итемы добавляются и отображаются...
Угу, в режиме ЛарджАйконс. А в Details не хочет
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.05.2014, 10:15
KriBetko, колонку добавьте и будет счастье...
1
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
26.05.2014, 13:52  [ТС]
Spawn, вот спасибо, все вышло.
Это я накосячил, не тот контрол работал

Добавлено через 1 час 3 минуты
Spawn, хех, снова помогите глупому. А как работать больше чем с одной колонкой?
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.05.2014, 13:55
KriBetko,
C#
1
2
3
4
5
6
7
8
9
10
11
        // подписываем ListView на событие RetrieveVirtualItem 
        private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
        {
            // Если индекс в границах нашей коллекции
            if (e.ItemIndex >= 0 && e.ItemIndex < _listViewData.Count)
            {
                // добавляем новый элемент в коллекцию
                e.Item = new ListViewItem(_listViewData[e.ItemIndex]);
                e.Item.SubItems.Add("Вторая колонка");
            }
        }
1
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
26.05.2014, 14:35  [ТС]
Spawn, спасибо. А кроме VirtualMode, есть еще способы убрать мерцания listView'a? VirtualMode оказался неповоротливым - сортировка невозможно, и медленным.
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
26.05.2014, 15:57
KriBetko, мерцание убирается вот так:
C#
1
2
3
4
5
6
7
    public class MyListView : ListView
    {
        public MyListView()
        {
            DoubleBuffered = true;
        }
    }
Можно было и не городить виртуальный список ради этого.
Если для Вас VirtualMode медленный, то уж пишите собственный элемент управления, уверяю, что принцип отображения у Вас ничем отличаться не будет. Сортировка возможна, только сортируется именно источник данных.
1
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
26.05.2014, 21:28
KriBetko, и почему вы решили, что сортировка невозможна? Сортируете элементы в List'e и обновляете ListView. Насчет медленности, попробуйте добавить 1-5 тысяч элементов в ListView, который работает в обычном режиме и в тот, который в виртуальном и как говорится увидите разницу.

И на будущее, если вы не знаете как чем-то пользоваться, то не надо говорить, что это плохо.
0
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
26.05.2014, 21:48  [ТС]
Цитата Сообщение от artemka2008 Посмотреть сообщение
KriBetko, и почему вы решили, что сортировка невозможна? Сортируете элементы в List'e и обновляете ListView. Насчет медленности, попробуйте добавить 1-5 тысяч элементов в ListView, который работает в обычном режиме и в тот, который в виртуальном и как говорится увидите разницу.
И на будущее, если вы не знаете как чем-то пользоваться, то не надо говорить, что это плохо.
Почему я решил, что сортировка невозможна? Да вы сами это сказали.
Мне не нужно выводить больше сотни элементов, а разница заметна. И пусть хоть он может обработать трилион, за то время, что в обычном тысячу, но мне это не надо.
Я лишь указал на два недостатка, а не назвал режим плохим словом.
0
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
30.05.2014, 21:39  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
KriBetko, мерцание убирается вот так:
C#
1
2
3
4
5
6
7
public class MyListView : ListView
{
 public MyListView()
 {
 DoubleBuffered = true;
 }
}
Для этого надо создать отдельный класс и где-то его инициализировать?
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
30.05.2014, 23:53
KriBetko, а я что в примере сделал? Создал класс. В дизайнер его можно будет добавить с обычного ToolBox, ну или динамически в коде.
0
4 / 4 / 4
Регистрация: 01.11.2013
Сообщений: 135
31.05.2014, 14:21  [ТС]
Spawn, прошу прощения, я лишь начинающий и плохо понимаю работу с классами. Можно подробнее?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2014, 14:21
Помогаю со студенческими работами здесь

Нужен пример реализации Drag&Drop в виртуальном ListView
Подскажите пример реализации Drag&amp;Drop в виртуальном ListView.

Нужен пример работы с Socket
Требуется простой пример лучше статья где реализована работа с сокетами т.е отправка сообщения на удаленый ip адресс и получение с него...

Нужен пример работы с таймером
Это простой класс, и поэтому не хочу про него много читать, и по книге я не дошёл до этого. Прошу написать пример показа сообщения каждые...

Нужен пример работы с матрицами
Как сделать матрицы в C++? Привидите хоть небольшой пример.

Нужен пример работы с COM портом
Есть прибор работает через com port . Отправляя ему 1 любой символ, он отправляет строку. Нужны примеры faq по работе с ком портом си. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru