C# 获取ListView中焦点项目的位置
在列表视图中我想获取被聚焦项目的int位置ID。表示最后选择的项目 例如:如果我单击项目10,ID应该变成10,但是如果我按住CTRL键并单击项目20(那么10和20都将被选中),那么我希望ID变成20 这是我一直在尝试的,但当我选择多个项目时会出现错误: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
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但我不知道事件的触发顺序,如果是最后一个单击的项目,那么事件就是您最后选择的。。也许你应该试试