【问题标题】:How can I get a listview item index when clicking on the item?单击项目时如何获取列表视图项目索引?
【发布时间】:2017-03-14 14:55:21
【问题描述】:

例如,如果我单击第一项,它将位于索引 0 处。 如果我点击第 15 项,那么索引应该是 16。

我试过了

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = listView1
        }

但我不确定这是正确的事件还是我应该使用 listView1_Click 事件?

而listView1 没有任何属性SelectedIndex。 最后一件事是我想根据我点击的项目的索引来获取项目文本。

【问题讨论】:

  • 你不是说如果你点击第15项索引应该是14吗?

标签: c# .net winforms listview


【解决方案1】:

使用ListView.SelectedIndices 属性:

List<int> selectedIndices = listView1.SelectedIndices.Cast<int>().ToList();

它返回所选索引的集合(因为默认情况下,如果您在按住 Ctrl 或 Shift 键的情况下单击项目,则可以在列表视图中选择多个项目)。另请注意,当您取消选择所有项目时,此集合将为空,并且 listView1.SelectedIndices[0] 之类的内容将引发 IndexOutOfRange 异常。

但是如果您将MultiSelect 属性设置为false。那么这个集合将始终包含零个或一个项目。您可以使用SelectedIndicesCollectionCount 属性来检查项目是否被选中:

 if (listView1.SelectedIndices.Count > 0)
 {
    int selectedIndex = listView1.SelectedIndices[0];
 }

【讨论】:

  • 它正在工作,但我需要在同一个项目上单击两次才能获取索引。第一次点击返回 0 只有第二次点击返回正确的索引。
  • @DanielHalfoni 你找到问题的根源了吗?
  • 是的,该行在 SelectedIndex 事件中,一旦我将其移至 Click 事件,它工作正常。
【解决方案2】:

假设您想要当前选定项目的索引,您可以这样做:
int index = ListView1.FocusedItem.Index

【讨论】:

  • 没有属性 SelectedIndex。我只看到 SelectedIndices 和 SelectedItems。
【解决方案3】:

您需要使用选定的索引列表,您也可以这样做。

listView1.SelectedIndices[0]

【讨论】:

    【解决方案4】:

    首先你可以得到如下的listview item对象

    ListViewItem lst=(ListViewItem)listView.SelectedItems[0];
    

    从那个对象(lst)你可以得到如下文本

    string text=lst.Content.ToString();
    

    【讨论】:

      【解决方案5】:

      根据MSDN,还有SelectedIndex。在我看来,您的事件是错误的,但您仍然可以通过 .SelectedIndex 看到它。如前所述。 更新:根据评论,链接已修复为正确的大小写。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多