在ListView中选择下一个项目

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

谢谢。

listView1.SelectedItems[0].Index = index; 更改为 listView1.SelectedIndex = index; - ryrich
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;
}

1

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

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

ListView.SelectedIndexCollection indexes = this.ListView1.SelectedIndices;

foreach ( int i in indexes )
{
 //
}

我尝试在foreach语句中添加listView1.SelectedIndices = i;,但是出现了错误。(我还是个初学者,抱歉) - Abraham
@Abraham,出了什么错误?你可以阅读http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.aspx。 - Soner Gönül
无法分配给 -- 它是只读的。并且也不能将 int 隐式转换为 System.Windows.Forms.ListView.SelectedIndexCollection。 - Abraham
ListView.SelectedIndices 返回的是 SelectedIndexCollection,而不是像 i 一样返回 int。你应该使用 foreach 循环来读取所有被选中的索引。然后,你可以使用 i 作为这些索引的下标。请多次阅读 MSDN 页面。 - Soner Gönül
好的,我会阅读并在它工作后回来,谢谢。 - Abraham

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

为了让它工作,其他的解决方案对我都不起作用。

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


0
如果你删除了一个项,"下一个" 项的索引与你刚刚删除的那个索引相同。因此,我会确保你有 listview1.IsSynchroniseDwithCurrentItemTrue = true,然后
var index = listView1.SelectedItems[0].Index;
listView1.Items.Remove(listView1.SelectedItems[0]);
CollectionViewSource.GetDefaultView(listview).MoveCurrentTo(index);

"CollectionViewSource在当前上下文中不存在" 我是否缺少一个using语句? - Abraham

0
尝试使用listView1.SelectedIndices属性。

我有什么遗漏吗?在“listView1.SelectedX”下,我只看到SelectedIndexChanged、SelectedIndices和SelectedItems。 - Abraham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接