获取焦点项在 ListView 中的位置

Get position of Focused item in ListView

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

如果你想要索引,那么你可以得到它,

listSub.SelectedIndices[0];

已编辑: 如果您启用了多选,那么您将遍历 SelectedIndices 数组以获取它们。

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

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

我可以给你最后点击的项目...你需要添加一个评估,无论它是否被选中,但这是我在 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;
        }
    }
}