获取焦点项在 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;
}
}
}
在 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;
}
}
}