获取ListView中选择的Item的索引

时间:2014-01-24 08:35:25

标签: c# wpf listview indexing

我已经搜索了大约一个小时但无法找到最佳解决方案。 我正在从VB.NET迁移到C#Forms和C#WPF。 不要管那个... 所以我将此代码用于C#表单,它可以工作,但不能用于C#WPF

 if (ListView1.SelectedItems.Count > 0)
            {
                for (lcount = 0; lcount <= ListView1.Items.Count - 1; lcount++)
                {
                    if (ListView1.Items[lcount].Selected == true)
                    {
                        var2 = lcount;
                        break;
                    }
                }
            }

这是我想要获取列表框中单击项目的索引的方式。 我在.SELECTED中有错误

请帮忙。

6 个答案:

答案 0 :(得分:16)

您可以从listView获取SelectedIndex。无需遍历所有项目,因为根据您的代码,您似乎对所选项目的索引感兴趣。

var2 = ListView1.SelectedIndex;

OR

如果仅对第一个索引感兴趣,那么这将起作用:

if (lst.SelectedItems.Count > 0)
{
    var2 = lst.Items.IndexOf(lst.SelectedItems[0]);
}

答案 1 :(得分:3)

如果您使用的是.NET Compact Framework,则不支持SelectedIndex。对于一般解决方案,我更喜欢SelectedIndices

ListView.SelectedIndexCollection indices = lst.SelectedIndices;
if (indices.Count > 0)
{
    // Do something with indices[0]
}

答案 2 :(得分:2)

对于Visual Studio 2015,SelectedIndex似乎不可用。相反,您可以使用SelectedIndices[x] x=0为您提供第一个选定项目:

listView.SelectedIndices[0]

您还可以将MultipleSelect属性设置为false,以便一次只能选择一个项目。

答案 3 :(得分:1)

它可以返回NULL。 SelectedIndexChanged事件也可以是FIRED TWICE。第一次,还没有选择。

所以找到它的唯一安全方法是:

    private void lv1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (lv1.FocusedItem == null) return;
        int p = lv1.FocusedItem.Index;

... now int p具有正确的值......

答案 4 :(得分:0)

为什么不带回SelectedIndex?在当前命名空间之后添加此扩展名。

public static class Extension
{
    public static int SelectedIndex(this ListView listView)
    {
        if (listView.SelectedIndices.Count > 0)
            return listView.SelectedIndices[0];
        else
            return 0;
    }
}

将此类封装在名为Extensions的名称空间中,然后将其添加到项目名称空间中以使用扩展名。

  using Extensions;

然后就像这样使用

   private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int selectionindex = ListView1.SelectedIndex();
        ListViewItem seletedItem = ListView1.Items[selectionindex];           
    }

P.S。 扩展方法应该在Else上返回-1,但只要您从SelectedIndexChanged事件中使用它,就可以了,因为如果没有项目,它将不会被触发。 这是设计的,因为SelectedIndexChanged事件被触发两次。一旦取消选择初始项目,然后选择新项目。 正确的方法是返回-1并检查负数。 这也是为什么有人和ArgumentOutOfRange异常的原因。

答案 5 :(得分:0)

sColl.Clear();             string item = String.Empty;

        if (listView1.SelectedItems.Count > 0)
        {
            for (int i = 0; i < listView1.SelectedItems.Count; i++)
            {
                if (listView1.SelectedItems[i].Selected)   
                {
                    int i2 = listView1.SelectedItems[i].Index;
                    item = listView1.Items[i2].Text;
                    sColl.Add(item);
                }
            }
        }

        listView1.SelectedItems.Clear();
        foreach (var itemS in sColl)
        {
            string items = itemS;
        }

        sColl.Clear();
        listView1.SelectedItems.Clear();