4

我有一种方法可以删除 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

谢谢你。

4

6 回答 6

2

我不得不在上面的上一个答案中再添加一行代码,并进行检查以验证未超过计数:

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;
}
于 2014-11-11T20:28:33.247 回答
1

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

获取控件中选定项的索引。

ListView.SelectedIndexCollection indexes = this.ListView1.SelectedIndices;

foreach ( int i in indexes )
{
 //
}
于 2013-03-21T14:18:06.880 回答
0

尝试使用 listView1.SelectedIndices 属性

于 2013-03-21T14:13:02.953 回答
0

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

var index = listView1.SelectedItems[0].Index;
listView1.Items.Remove(listView1.SelectedItems[0]);
CollectionViewSource.GetDefaultView(listview).MoveCurrentTo(index);
于 2013-03-21T14:25:26.983 回答
0

我已通过以下方式完成此操作:

int selectedIndex = listview.SelectedIndices[0];
selectedIndex++;
listview.Items[selectedIndex].Selected = true;
于 2013-04-25T10:58:01.193 回答
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();

为了让它工作,没有其他解决方案对我有用。

希望有经验的程序员能给出更好的解决方案。

于 2014-08-05T14:48:20.940 回答