【问题标题】:prevent item losing focus when refreshing list view in c#在c#中刷新列表视图时防止项目失去焦点
【发布时间】:2012-09-25 06:41:43
【问题描述】:

我有列表视图和一些列“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 的焦点项目设置为找到但它不起作用的项目。 这种问题有蚂蚁解决方案吗?

【问题讨论】:

    标签: c# listview focus


    【解决方案1】:

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

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

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

    listView.Items[oldFocusedIndex].Selected = true;
    

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

    listView.Items[oldFocusedIndex].EnsureVisible();
    

    【讨论】:

    • 但我没有方法 .SelectedIndex?我无法获得索引。
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2013-06-12
    相关资源
    最近更新 更多