1

我有列表视图和一些列“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);
}

所以这个方法工作得很好,除了每次我刷新项目的列表焦点丢失,这是合乎逻辑的,因为我从列表中删除了所有项目并再次填充它。所以我的问题是我如何才能将注意力集中在已编辑和新添加的项目上,主要是当我编辑一些项目时,我希望列表视图不要滚动到顶部,而是留在该已编辑项目所在的位置。我尝试使用 FindItemWithText 方法,而不是将 listview 的焦点项目设置为找到但它不起作用的项目。这种问题有蚂蚁解决方案吗?

4

1 回答 1

5

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

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

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

listView.Items[oldFocusedIndex].Selected = true;

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

listView.Items[oldFocusedIndex].EnsureVisible();
于 2012-10-04T09:07:00.707 回答