Как я могу отменить выбор элемента в 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;
    }