c# - 在 C# 中刷新 ListView 时防止项目失去焦点

标签 c# listview focus

我有 ListView 和一些列“ID”、“产品名称”和“供应商”。我可以添加、编辑或删除这些项目,并且在“弄乱”项目 ListView 后刷新如下。

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 的焦点项目设置为找到的项目,但它没有用。 这种问题有ant解决方案吗?

最佳答案

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

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

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

listView.Items[oldFocusedIndex].Selected = true;

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

listView.Items[oldFocusedIndex].EnsureVisible();

关于c# - 在 C# 中刷新 ListView 时防止项目失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723705/

相关文章:

c# - 避免非托管 c++、c++/cli 和 c# 代码之间的 std::deque 迭代器不可取消引用错误

android - 如何在Android中获取Listview项选择的计数

android - 在繁忙的 ListView 中更新 TextView 而不会失去 Spinner 焦点

javascript - HTML <select> 焦点问题 : 2 clicks needed with Firefox to select an <option>

java - 如何使用不同的热键添加焦点遍历?

iOS画外音: Focus selected cell and not the first row

c# - 在 Newtonsoft JSON.NET 模式中禁用空类型

javascript - 如何在 asp.net C# 中使用 jquery 绑定(bind) ul 标签

c# - 如何将我的公共(public) IP 与 HttpListener 一起使用

java - Android:Restful WS 的结果未显示在我的 ListView 上