ListView FocusedItem становится NULL - PullRequest
4 голосов
/ 10 ноября 2008

Когда программа запускается, появляется серия форм ListView. Мы заполнили один из них элементами (в виде строк) и проверили, изменилось ли состояние выбора. Как только он будет изменен, мы берем текст выбранного элемента с помощью FocusedItem.Text Первый раз работает просто отлично, но когда сделан другой выбор, выбранный элемент возвращается как ноль.

Единственный способ временно обойти эту проблему - очистить и снова заполнить форму. Недостатком является то, что мы теряем выделенный элемент. Должен быть другой способ обойти это. Может быть, мы не совсем понимаем, как на самом деле работает ListView?

Есть идеи?

Ответы [ 5 ]

2 голосов
/ 28 декабря 2010

Поместите в OnSelectedIndexHandler следующее условие:

if(listViewObject.SelectedItems!=null&& listViewObject.SelectedItems.Count>0)
{
   //....your code here
}
1 голос
/ 10 ноября 2008

Если вы ищете элемент, выбранный пользователем, вы должны использовать первый элемент в коллекции SelectedItems. FocusedItem - это элемент, который в настоящее время имеет фокус клавиатуры (и, следовательно, показывает пунктирный прямоугольник фокуса); если элемент управления не имеет фокуса, то и элемент не может.

0 голосов
/ 05 января 2017

Вы можете использовать ListViewItemSelectionChangedEventHandler.

ListView.ItemSelectionChanged += 
new ListViewItemSelectionChangedEventHandler(ListView_ItemSelectionChanged);

private void ListView_ItemSelectionChanged(Object sender, ListViewItemSelectionChangedEventArgs e)
{
    var x = e.IsSelected;
}

ListView_ItemSelectionChanged вызывается дважды. Вы можете игнорировать первый, используя

if (e.IsSelected == true)

редактирование: Попробуйте это:

ListView.Select();
0 голосов
/ 19 марта 2010

У меня была такая же проблема при использовании списка. Кажется, есть некоторая проблема в отношении события, которое происходит при выборе.

  1. SelectedIndexChanged событие, при котором выделенный элемент, выбранные элементы и выбранные индексы становятся нулевыми. Это причина вышеуказанной проблемы.
  2. ItemActivate может быть альтернативно использовано без каких-либо сбоев, если сфокусированный элемент, выбранные элементы или выбранные индексы не равны нулю ни во второй, ни в любое другое время.

При создании списка с подробностями событие SelectedIndexChanged запускается по умолчанию. Таким образом, изменение в соответствующем классе Designer и связанном обработчике события в основном классе сделает эту работу.

В классе конструктора смотрите событие, на которое подписан. Пример:

this.TaskslistView.SelectedIndexChanged
      += new System.EventHandler(TaskslistView_SelectedIndexChanged);

, для которого соответствующий метод обработки событий TaskslistView_SelectedIndexChanged присутствует в основном классе. Заменить это событие на

this.TaskslistView.ItemActivate
      += new System.EventHandler(this.TaskslistView_ItemActivate);

и замените соответствующий TaskslistView_SelectedIndexChanged на TaskslistView_ItemActivate.

Это должно решить проблему.

0 голосов
/ 10 ноября 2008

Я запустил тестовую программу и не вижу ни одного случая, когда FocusedItem мог бы быть нулем.

Не могли бы вы опубликовать код?

Вот что я получил после того, как я выбрал пункт «а», затем выбрал пункт «б» и затем щелкнул на пустом месте:

ItemSelectionChanged
    Item         : ListViewItem: {a}
    IsSelected   : True
    SelectedItem : ListViewItem: {a}
    FocusedItem  : ListViewItem: {a}
SelectedIndexChanged
    SelectedItem : ListViewItem: {a}
    FocusedItem  : ListViewItem: {a}
ItemSelectionChanged
    Item         : ListViewItem: {a}
    IsSelected   : False
    SelectedItem : null
    FocusedItem  : ListViewItem: {a}
SelectedIndexChanged
    SelectedItem : null
    FocusedItem  : ListViewItem: {a}
ItemSelectionChanged
    Item         : ListViewItem: {b}
    IsSelected   : True
    SelectedItem : ListViewItem: {b}
    FocusedItem  : ListViewItem: {b}
SelectedIndexChanged
    SelectedItem : ListViewItem: {b}
    FocusedItem  : ListViewItem: {b}
ItemSelectionChanged
    Item         : ListViewItem: {b}
    IsSelected   : False
    SelectedItem : null
    FocusedItem  : ListViewItem: {b}
SelectedIndexChanged
    SelectedItem : null
    FocusedItem  : ListViewItem: {b}

Заметил, что FocusedItem никогда не бывает нулевым.

Это то же самое в вашем случае?

Подойдет ли простая проверка if (listView.FocusedItem == null) для вашего дела?

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