如何取消选择ListView中的项目?

我有一个ListView,里面有几个项目。 当ListView失去焦点时,最后选择的ListViewItem仍然以灰色背景“选中”。
我想在ListView.FocusLost上实现它,选择消失了,因此将发生ListView.SelectedIndexChanged事件。
有任何想法吗?

我使用的是.NET CF 3.5。

假设您正在从父窗体/控件访问ListView。

您可以在表单的/ control的构造函数/ load事件中添加这段代码:

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; } 

你可以给代码一个更好的forms,顺便说一句。

 myListView.SelectedItems.Clear(); 

我知道这已经晚了,但是如果其他人需要解决方案,我想添加到解决方案中。

您需要将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; } 

这更容易。

 this.myListView.SelectedIndex = -1; this.myListView.Update(); 

解决这个问题的另一个有效方法是:

 foreach (ListViewItem i in myListView.SelectedItems) { i.Selected = false; } 

如果您使用的是EditItemTemplate而不是ItemTemplate,那么您可能一直在试图找出为什么ListView1.SelectedIndex = -1; 一直没有工作。 这是因为你需要使用ListView1.EditIndex = -1;

 if (listView1.SelectedItems.Count > 0) for (int i = 0; i < listView1.SelectedItems.Count; i++) { listView1.SelectedItems[i].Selected = false; }