Обновить элементы и подпункты списка с помощью таймера - PullRequest
1 голос
/ 05 декабря 2011

Я хотел бы обновить некоторые или все элементы моего списка и содержимое подэлементов с помощью таймера (1 секунда обновления), но просмотр списка мигает каждую секунду. Иногда подпункты теряются при перерисовке. Поскольку мой список содержит данные, которые могут быть изменены в любое время, я использую таймер.

Код: Я поместил эту функцию в метод Tick таймера

void Refresh()
{
   foreach(string s in lsttring)
   {
      lv.items.add(s);
      lv.items[i].subitems.add(i);
   }
}

Я ожидаю, что будет изменено только содержимое элементов (текст элемента и текст подпункта), а не весь просмотр списка вместе с отметкой таймера.

Ответы [ 2 ]

4 голосов
/ 05 декабря 2011

Элемент управления ListView поддерживает двойную буферизацию, он сопоставляет свойство DoubleBuffered с флагом стиля собственного элемента управления LVS_EX_DOUBLEBUFFER. Это довольно эффективно, но вы не можете получить к нему доступ напрямую, поскольку это защищенное свойство. Добавьте новый класс в ваш проект и вставьте код, показанный ниже. Компиляция. Перетащите новый элемент управления из верхней части панели инструментов на форму, заменив старый.

using System;
using System.Windows.Forms;

class BufferedListView : ListView {
    public BufferedListView() {
        this.DoubleBuffered = true;
    }
}
1 голос
/ 05 декабря 2011

Попробуйте это:

void Refresh()
{
   lv.BeginUpdate();
   foreach(string s in lsttring)
   {
      lv.items.add(s);
      lv.items[i].subitems.add(i);
   }
   lv.EndUpdate();
}

Таким образом вы обновите все элементы, и просмотр списка будет обновлен только в конце этой операции.
От Microsoft :

... если вы хотите добавлять элементы по одному, используя метод Add класса ListView.ListViewItemCollection, вы можете использовать метод BeginUpdate, чтобы элемент управления не перерисовывал ListView каждый раз, когдаэлемент добавлен.Когда вы завершите задачу добавления элементов в элемент управления, вызовите метод EndUpdate, чтобы разрешить перерисовку ListView. Этот способ добавления элементов может предотвратить мерцающее рисование ListView при добавлении большого количества элементов в элемент управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...