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

时间:2012-10-04 08:57:06

标签: 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);
}

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

1 个答案:

答案 0 :(得分:5)

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

int oldFocusedIndex = listView.SelectedItems[0].Index;

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

listView.Items[oldFocusedIndex].Selected = true;

由于ListView的滚动条将在Clear()方法后保留在顶部,您也可以让该项对用户可见:

listView.Items[oldFocusedIndex].EnsureVisible();