C# 在ListView中选择下一项

C# 在ListView中选择下一项,c#,winforms,listview,selectedindex,C#,Winforms,Listview,Selectedindex,我有一个方法可以删除ListView中当前选定的项 listView1.Items.Remove(listView1.SelectedItems[0]); 删除选定的一个后,如何在ListView中选择下一个 我试过类似的东西 var index = listView1.SelectedItems[0].Index; listView1.Items.Remove(listView1.SelectedItems[0]); listView1.SelectedItems[0].Index = in

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

谢谢。

尝试使用listView1。SelectedIndices属性

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

获取控件中选定项的索引


如果删除一个项目,“下一个”项目的索引与刚才删除的索引相同。因此,我会确保您有
listview1.issynchronisewithCurrentItemTrue=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();
为了让它发挥作用,其他任何解决方案都不适合我


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

我必须在上面的回答中再添加一行代码,再加上一个检查以验证计数是否超过:

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;
}
int-selectedIndex=listview.selectedDices[0];
选择dex++;
//防止最后一个元素出现异常:
如果(selectedIndex
change
listView1。选择editems[0]。Index=Index
列表视图1.SelectedIndex=索引我遗漏了什么吗?我在“listView1.SelectedX”下看到的是SelectedIndexChanged、SelectedDices和SelectedItems;在foreach语句中,但我得到一个错误。(对不起,我还是个初学者)@Abraham怎么了?您可以读取与原始版本相同的“无法分配到--它是只读的”以及“无法将int隐式转换为System.Windows.Forms.ListView.SelectedIndexCollection”
ListView.SelectedIndexCollection
返回
SelectedIndexCollection
而非
int
类似
i
。您应该使用
foreach
循环来读取所选的所有索引。然后,您可以使用
i
作为这些的索引。请阅读MSDN页面几次。好的,我会阅读它并在它工作后返回,谢谢。“CollectionViewSource在当前上下文中不存在”我是否缺少using语句?
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;
}