自动 select 重命名列表框中的项目

Automatically select renamed item in a listbox

我有一个包含许多项目的列表框(列表框中的每个项目都来自数据源)。这些项目按名称排序。我有一个主要形式的按钮。当我在列表框中选择一个项目并单击按钮时,该项目将以新形式出现。我可以在新表单中编辑 selected 项的名称。关闭新表单时,项目已重命名并且列表框已重新排序。

我怎样才能自动重新select 已经更改名称及其在列表框中的位置的原始项目?

FindString 不起作用,因为它已重命名。可能有一个函数可以通过使用 item.

的值来使用 SelectedIndex

示例数据:

[a1, a2, a3, a4, a5][ a1, a3, a4, a5, b2 ]

据我了解,您有 FormA,其中包含已排序项目的列表。您 select 一个项目,然后按一个按钮打开一个新的 FormB,然后重命名该项目。 return 加入 FormA 后,您希望最近重命名的项目已经 selected。您遇到的问题是您无法使用 FindString() 在列表中找到该项目,因为该项目已从命名 "a2" 更改为 "b2" 并且 FindString() 找不到 "a2" 了。

如果是这种情况,简单的解决方案是在 FormB 上创建一个 public 属性 来存储项目的新名称。此过程已在此处解释:How to return a value from a Form in C#?

示例:

public string ReturnValue1 {get;set;}

private void btnOk_Click(object sender,EventArgs e)
{
    this.ReturnValue1 = "b2";
    this.Close();
}

从 FormB return 后,您只需使用带有 ReturnValue1 的 FindString() 来获取您想要 select 的项目的索引。

var result = form.ShowDialog();
if (result == DialogResult.OK)
{
    string val = form.ReturnValue1; //value preserved after close
    int index = listBox.FindString(val);
    listBox.SetSelected(index,true);
}