我有 ListView 和一些列“ID”、“产品名称”和“供应商”。我可以添加、编辑或删除这些项目,并且在“弄乱”项目 ListView 后刷新如下。
listView.Items.Clear();
foreach (var item in result)
{
ListViewItem lv = new ListViewItem(item.ID.ToString());
lv.SubItems.Add(item.Name.ToString());
lv.SubItems.Add(item.Vendor.ToString());
listView.Items.Add(lv);
}
所以这个方法工作正常,除了每次我刷新列表时项目的焦点都丢失了,这是合乎逻辑的,因为我从列表中删除了所有项目并再次填充它。 所以我的问题是我如何才能专注于编辑和新添加的项目,主要是当我编辑一些项目时我希望 listview 不要滚动到顶部而是留在编辑项目所在的位置。 我尝试使用 FindItemWithText 方法,而不是将 ListView 的焦点项目设置为找到的项目,但它没有用。 这种问题有ant解决方案吗?
最佳答案
将焦点项的索引保存到变量中:
int oldFocusedIndex = listView.SelectedItems[0].Index;
稍后您可以恢复焦点执行:
listView.Items[oldFocusedIndex].Selected = true;
您还可以使项目对用户可见,因为 ListView
的滚动条在 Clear()
方法之后将保留在顶部:
listView.Items[oldFocusedIndex].EnsureVisible();
关于c# - 在 C# 中刷新 ListView 时防止项目失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723705/