在ListView中选择下一个项目

本文关键字:下一个 项目 选择 ListView | 更新日期: 2023-09-27 18:05:02

我有一个方法可以在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

谢谢。

在ListView中选择下一个项目

我必须在前面的答案中再添加一行代码,并检查计数是否超出:

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

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

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

ListView.SelectedIndexCollection indexes = this.ListView1.SelectedIndices;
foreach ( int i in indexes )
{
 //
}

尝试使用listView1。SelectedIndices地产

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

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

我是这样做的:

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

实际上我必须这样做:

        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();

让它工作,其他的解决方案都不适合我。

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