C# 获取ListView中焦点项目的位置

C# 获取ListView中焦点项目的位置,c#,forms,listview,indexing,focus,C#,Forms,Listview,Indexing,Focus,在列表视图中我想获取被聚焦项目的int位置ID。表示最后选择的项目 例如:如果我单击项目10,ID应该变成10,但是如果我按住CTRL键并单击项目20(那么10和20都将被选中),那么我希望ID变成20 这是我一直在尝试的,但当我选择多个项目时会出现错误: private void listSub_SelectedIndexChanged(object sender, EventArgs e) if (listSub.SelectedItems.Count != 0) { Mes

列表视图中我想获取被聚焦项目的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];
已编辑:如果已启用Multiselect,则将遍历SelectedDices数组以获取所有选项

编辑2:ItemSelectionChanged Listener,这对我有用

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

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

listSub.SelectedIndices[0];
已编辑:如果已启用Multiselect,则将遍历SelectedDices数组以获取所有选项

编辑2:ItemSelectionChanged Listener,这对我有用

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

我可以给你点击的最后一项。。。无论是否选中,您都需要添加求值,但我在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());
    }
}


我知道,但我只得到数字最低的ID,而不是我上次单击的项目。那么,取上限上的值。。listSub.SelectedDices[listSub.SelectedDices.Count-1];似乎总是选择最高的位置。然后改用ItemSelectionChanged侦听器。我将很快发布一个代码片段。这将起作用。。。虽然我知道,每个添加/删除的选择都会触发一次处理程序,但我只会获取编号最低的ID,而不是我上次单击的项目。好吧,然后取上限上的值。。listSub.SelectedDices[listSub.SelectedDices.Count-1];似乎总是选择最高的位置。然后改用ItemSelectionChanged侦听器。我将很快发布一个代码片段。这将起作用。。。每个添加/删除的选择都会触发一次处理程序,考虑到绑定到listview的集合是什么?在使用中是否有System.Linq命名空间?不,我不使用Linq,我想我在项目中使用的是较旧的.Net,所以Linq在那里不起作用。。。我想。我尝试使用System.Linq添加;但它给出了错误。所以,如果没有Linq这是可能的,我想那会更好。@spunit是的,但这只在你使用鼠标的情况下有效。。。所以要小心。。。维诺德的解决方案对健康更安全use@spunit但我不知道事件的触发顺序,如果是最后一个单击的项目,那么事件就是您最后选择的。。也许你应该尝试将集合绑定到listview?在使用中是否有System.Linq命名空间?不,我不使用Linq,我想我在我的项目中使用了旧的.Net,所以Linq在那里不工作。。。我想。我尝试使用System.Linq添加;但它给出了错误。所以,如果没有Linq这是可能的,我想那会更好。@spunit是的,但这只在你使用鼠标的情况下有效。。。所以要小心。。。维诺德的解决方案对健康更安全use@spunit但我不知道事件的触发顺序,如果是最后一个单击的项目,那么事件就是您最后选择的。。也许你应该试试