如何取消选择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; }