在c#中刷新列表视图时防止项目失去焦点

Mil*_*lan 1 c# listview focus

我有列表视图和一些列"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);
}
Run Code Online (Sandbox Code Playgroud)

所以这个方法工作正常,除非每次刷新列表焦点的项目丢失,这是合乎逻辑的,因为我从列表中删除了所有项目并再次填充它.所以我的问题是我如何能够专注于编辑和新添加的项目,主要是当我编辑一些项目时,我希望listview不要滚动到顶部,而是留在编辑项目所在的位置.我尝试使用方法FindItemWithText,而不是将listview的焦点项设置为找到的项,但它不起作用.这种问题有解决办法吗?

Age*_*ire 5

将焦点项的索引保存到变量:

int oldFocusedIndex = listView.SelectedItems[0].Index;
Run Code Online (Sandbox Code Playgroud)

稍后您可以恢复焦点执行:

listView.Items[oldFocusedIndex].Selected = true;
Run Code Online (Sandbox Code Playgroud)

您还可以使该项对用户可见,因为ListViewClear()方法后滚动条将保留在顶部:

listView.Items[oldFocusedIndex].EnsureVisible();
Run Code Online (Sandbox Code Playgroud)