获取ListView中聚焦项目的位置

时间:2015-03-16 09:38:15

标签: c# forms listview indexing focus

ListView 中,我想获得焦点项目的int位置ID。含义最后选择的项目。

例如:如果我点击第10项,ID应该变为10,但如果我按住CTRL并单击项目20(然后将选择10和20),那么我希望ID变为20。

这是我一直在尝试的,但是当我选择多个项目时会出错:

private void listSub_SelectedIndexChanged(object sender, EventArgs e)
  if (listSub.SelectedItems.Count != 0)
  {
    MessageBox.Show(Convert.ToString(listSub.FocusedItem.Index + 1));
  }
}

2 个答案:

答案 0 :(得分:2)

如果你想要索引,那么你可以通过

获得它
listSub.SelectedIndices[0];

已编辑:如果您已启用Multiselect,那么您将遍历SelectedIndices数组以获取所有内容。

编辑2: ItemSelectionChanged听众,这对我有用......

        void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if(e.IsSelected)
                MessageBox.Show(e.ItemIndex.ToString());
        }

答案 1 :(得分:2)

我可以给你点击的最后一项...你需要添加一个评估是否选中它,但是我在MouseDown处理程序中做了什么:

private void listSub_MouseDown(object sender, MouseEventArgs e)
{
    ListViewItem lastClicked = listSub.Items.Cast<ListViewItem>().SingleOrDefault(item => item.Bounds.Contains(e.X, e.Y));
    if (lastClicked != null)
    {
        MessageBox.Show(lastClicked.Index.ToString());
    }
}

修改

没有Linq:

private void listSub_MouseDown(object sender, MouseEventArgs e)
{
    foreach (ListViewItem listViewItem in listSub.Items)
    {
        if (listViewItem.Bounds.Contains(e.X,e.Y))
        {
            MessageBox.Show(listViewItem.Index.ToString()); 
            break;
        }
    }
}