我有列表视图和一些列“ID”,“产品名称”和“供应商”。我可以添加,编辑或删除这些项目,并在“弄乱”项目列表视图后刷新这样的内容。
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的焦点项设置为找到的项,但它不起作用。 这种问题有解决办法吗?
答案 0 :(得分:5)
将焦点项目的索引保存到变量:
int oldFocusedIndex = listView.SelectedItems[0].Index;
稍后您可以恢复焦点执行:
listView.Items[oldFocusedIndex].Selected = true;
由于ListView
的滚动条将在Clear()
方法后保留在顶部,您也可以让该项对用户可见:
listView.Items[oldFocusedIndex].EnsureVisible();