我有一个包含许多项目的列表框(列表框中的每个项目都来自数据源)。这些物品按名称排序。我有一个主要形式的按钮。当我在列表框中选择一个项目并单击该按钮时,该项目将以新的形式出现。我可以在新表单中编辑所选项目的名称。关闭新表单后,项目已重命名,列表框将重新排序。
如何自动重新选择已更改名称及其在列表框中位置的原始项目?
FindString
无法正常工作,因为它已经重命名。可能有一个函数可以通过使用item的值来使用SelectedIndex
。
示例数据:
从[a1, a2, a3, a4, a5]
到[ a1, a3, a4, a5, b2 ]
答案 0 :(得分:0)
根据我的理解,您有FormA,其中包含已排序项目的列表。您选择一个项目,然后按一个按钮打开一个新的FormB,然后重命名该项目。返回FormA后,您希望已选择最近重命名的项目。您遇到的问题是您无法使用FindString()在列表中找到该项目,因为项目已从命名为“a2”更改为“b2”而FindString()不再找到“a2”。
如果是这种情况,简单的解决方案是在FormB上创建一个公共属性,用于存储项目的新名称。此过程已在此处说明: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返回后,只需使用FindString()和ReturnValue1来获取要选择的项目的索引。
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);
}