2013-03-21 155 views
4

下一个项目我有,消除当前所选的项目在ListView选择的ListView

listView1.Items.Remove(listView1.SelectedItems[0]); 

如何选择删除选定的一个后在ListView接下来的一个方法是什么?

我想是这样

var index = listView1.SelectedItems[0].Index; 
listView1.Items.Remove(listView1.SelectedItems[0]); 
listView1.SelectedItems[0].Index = index; 

但我得到的错误

Property or indexer 'System.Windows.Forms.ListViewItem.Index' cannot be 
assigned to -- it is read only 

谢谢。

+0

变化'listView1.SelectedItems [0]的.index =指数;'到'listView1.SelectedIndex = index;' – ryrich 2013-03-21 14:16:42

回答

1

ListView没有SelectedIndex财产。它有一个SelectedIndices属性。

获取控件中所选项目的索引。

ListView.SelectedIndexCollection indexes = this.ListView1.SelectedIndices; 

foreach (int i in indexes) 
{ 
// 
} 
+1

你是对的,对不起我的错误。谢谢。 – David 2013-03-21 14:19:55

+0

我试着添加listView1.SelectedIndices = i;在foreach语句中,但是我得到一个错误。 (我还是个初学者,对不起) – Abraham 2013-03-21 14:25:11

+0

@Abraham什么是错误?您可以阅读http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.aspx – 2013-03-21 14:26:05

0

尝试使用listView1.SelectedIndices财产

+0

我错过了什么?我所看到的“listView1.SelectedX”下面是SelectedIndexChanged,SelectedIndices和SelectedItems。 – Abraham 2013-03-21 14:17:34

+0

已更新,谢谢。 – David 2013-03-21 14:20:21

0

如果你删除了某个项目,“下一个”项的索引是相同的索引刚删除的一个。所以,我会确保你有listview1.IsSynchroniseDwithCurrentItemTrue = true然后

var index = listView1.SelectedItems[0].Index; 
listView1.Items.Remove(listView1.SelectedItems[0]); 
CollectionViewSource.GetDefaultView(listview).MoveCurrentTo(index); 
+0

“CollectionViewSource在当前上下文中不存在”我错过了使用语句吗? – Abraham 2013-03-21 14:31:18

0

我在下面的方式做到了这一点:

int selectedIndex = listview.SelectedIndices[0]; 
selectedIndex++; 
listview.Items[selectedIndex].Selected = true; 
0

我其实已经做到这一点:

 int[] indicies = new int[listViewCat.SelectedIndices.Count]; 
     listViewCat.SelectedIndices.CopyTo(indicies, 0); 
     foreach(ListViewItem item in listViewCat.SelectedItems){ 
      listViewCat.Items.Remove(item); 
      G.Categories.Remove(item.Text); 
     } 
     int k = 0; 
     foreach(int i in indicies) 
      listViewCat.Items[i+(k--)].Selected = true; 
     listViewCat.Select(); 

到得到它的工作,其他解决方案都没有为我工作。

希望更有经验的程序员可以提供更好的解决方案。

1

我不得不的一行代码添加到前面的回答以上,再加上一个检查,以验证计数不超过:

int selectedIndex = listview.SelectedIndices[0]; 
selectedIndex++; 
// Prevents exception on the last element:  
if (selectedIndex < listview.Items.Count) 
{ 
    listview.Items[selectedIndex].Selected = true; 
    listview.Items[selectedIndex].Focused = true; 
}