Как я могу отменить выбор элемента в ListView?
У меня есть ListView с несколькими элементами в нем. Когда ListView теряет фокус, последний выбранный ListViewItem по-прежнему "выбран" с серым фоном.
Я хотел бы добиться этого в ListView.FocusLost, выбор не будет, и поэтому произойдет событие ListView.SelectedIndexChanged.
Любые идеи?
Я использую .NET CF 3.5.
Ответы
Ответ 1
Предположим, что вы обращаетесь к ListView из родительской формы/элемента управления.
Вы можете добавить этот кусок кода в конструктор/событие конструктора формы/загрузки:
this.myListView.LostFocus += (s, e) => this.myListView.SelectedIndices.Clear();
Хорошо, поэтому в вашем случае вы замените делегата на:
if (this.myListView.SelectedIndices.Count > 0)
for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
{
this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
}
Вы можете дать код более приятной форме, кстати.
Ответ 2
myListView.SelectedItems.Clear();
Ответ 3
Я знаю, что это поздно, но если кому-то понадобилось решение, которое я хотел бы добавить к решению.
Вам необходимо установить для свойства Focused значение false, чтобы избежать выделения выделенных элементов с фокусом.
for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
{
this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
this.myListView.Items[this.myListView.SelectedIndices[i]].Focused = false;
}
Ответ 4
это проще.
this.myListView.SelectedIndex = -1;
this.myListView.Update();
Ответ 5
Еще один эффективный способ приблизиться к этому:
foreach (ListViewItem i in myListView.SelectedItems)
{
i.Selected = false;
}
Ответ 6
Если вы используете EditItemTemplate, а не ItemTemplate, возможно, вы пытались выяснить, почему ListView1.SelectedIndex = -1; не работает. Это потому, что вам нужно использовать ListView1.EditIndex = -1;
Ответ 7
if (listView1.SelectedItems.Count > 0)
for (int i = 0; i < listView1.SelectedItems.Count; i++)
{
listView1.SelectedItems[i].Selected = false;
}