在ListView中选择下一个项目

时间:2013-03-21 14:11:49

标签: c# winforms listview selectedindex

我有一个删除ListView中当前所选项目的方法

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

如何在删除选定的ListView后选择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

谢谢。

6 个答案:

答案 0 :(得分:1)

ListView没有SelectedIndex属性。它有SelectedIndices属性。

  

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

ListView.SelectedIndexCollection indexes = this.ListView1.SelectedIndices;

foreach ( int i in indexes )
{
 //
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

尝试使用listView1.SelectedIndices属性

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我是按照以下方式完成的:

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

答案 5 :(得分: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();

要让它发挥作用,其他解决方案都没有为我工作。

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