【问题标题】:Select next item in ListView选择 ListView 中的下一项
【发布时间】:2013-03-21 14:11:49
【问题描述】:

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

标签: c# winforms listview selectedindex


【解决方案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】:

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

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

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

    【讨论】:

    • 我尝试添加 listView1.SelectedIndices = i;在 foreach 语句中,但出现错误。 (我还是个初学者,抱歉)
    • @Abraham 错误是什么?你可以阅读msdn.microsoft.com/en-us/library/…
    • 与原始“不能分配给--它是只读的”和“不能隐式转换 int 为 System.Windows.Forms.ListView.SelectedIndexCollection”相同
    • ListView.SelectedIndices 返回 SelectedIndexCollection 而不是 inti。您应该使用foreach 循环来读取所有被选中的索引。然后,您可以使用i 作为这些的索引。请多读几遍MSDN页面..
    • 好的,我会阅读它并在它工作后回来,谢谢。
    【解决方案3】:

    尝试使用 listView1.SelectedIndices 属性

    【讨论】:

    • 我错过了什么吗?我在“listView1.SelectedX”下看到的只有 SelectedIndexChanged、SelectedIndices 和 SelectedItems。
    【解决方案4】:

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

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

    【讨论】:

    • “CollectionViewSource 在当前上下文中不存在”我是否缺少 using 语句?
    【解决方案5】:

    我通过以下方式完成了这项工作:

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

    【讨论】:

      【解决方案6】:

      实际上我不得不这样做:

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

      为了让它发挥作用,其他解决方案都不适合我。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-25
        相关资源
        最近更新 更多