Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: сохранение фокуса выделенного элемента ListView  (Прочитано 9416 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
123456789igor
Новенький

by
Offline Offline

« : 10-05-2013 15:47 » 

Есть следующий код. В listview добавляются процессы. Данный метод вызывается каждые 3 секунды с помощью таймера. Как сделать так, что бы после обновления фокус оставался на выделенном элементе, если он ещё есть и положение скролла сохранялось? Все подобные темы пересмотрел но так и не получилось решить проблему.
Код: (C#)
 private void UpdateProcessList()
        {
            listView1.Items.Clear();
            foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
            {
                try
                {
                    int index = listView1.Items.Add(p.ProcessName).Index;
                    listView1.Items[index].SubItems.Add(p.Id.ToString());
                    listView1.Items[index].SubItems.Add(p.StartTime.ToShortTimeString());
                    long temp = p.WorkingSet64 / 1024;
                    listView1.Items[index].SubItems.Add(temp.ToString()+" КБ");
                }
                catch { }
            }
        }
Записан
Dmitry
Помогающий

ru
Offline Offline

« Ответ #1 : 10-05-2013 16:30 » 

ListView.FocusedItem
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 10-05-2013 16:41 » 

Дак подход странный: удалить весь список - фокус и теряется; потом добавлять всё заново - непонятно, на каком пункте восстанавливать выделение. Конечно в интернете такая проблема не обсуждается, потому что так не делают в случаях, когда нужно сохранять выделение.

Нужно удалять лишь те элементы, которые исчезли из списка процессов, добавлять новые, у остальных обновлять WorkingSet. Причём для перечисления процессов, по которому проходит цикл, никто не гарантирует сохранение порядка перебора процессов.
« Последнее редактирование: 10-05-2013 16:43 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-05-2013 17:55 » new

Запоминать положение и процесс (id)
После обновления искать про процессу и устанавливать
В случае пропадания процесса - устанавливать на запомненный состояние, но если процессов меньше, то последний/первый, а лучше ни на что не устанавливать.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 10-05-2013 20:34 » 

Sla, тогда сортировать до занесения в список - так порядок будет более-менее сохранён (за исключением удалившихся и добавившихся).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines