从列表框中快速选择对象
本文关键字:快速选择 对象 列表 | 更新日期: 2023-09-27 18:26:47
当用户在列表框中选择某个对象时,我正在尝试检索数组中的对象。
目前,列表框有一个文件名列表,我实现解决方案的方法是循环遍历数组,找到匹配的文件名,并在找到对象引用后使用它。
foreach (CPSImage img in objWholeLibrary)
{
if (Path.GetFileName(img.FileName).Equals(lbxImageObjects.SelectedItem.ToString()))
{
currImage = img;
break;
}
}
UpdateDisplay();
有更有效的方法吗?而不是依赖字符串来匹配对象?
如果您使用的.NET Framework版本至少为3.5,那么您可以使用LINQ:
currImage = objWholeLibrary.FirstOrDefault(
img => Path.GetFileName(img.FileName).Equals(
lbxImageObjects.SelectedItem.ToString())
);
UpdateDisplay();
执行速度应该相同,只是代码看起来会更干净一些。
类似的内容;
currImage = objWholeLibrary.Single(img => Path.GetFileName(img.FileName).Equals(lbxImageObjects.SelectedItem.ToString()));
UpdateDisplay();
如果列表框中填充了数组的所有项,那么您只需要获取列表框的选定索引,并获取数组中相同索引处的元素,它们应该匹配,因为列表和数组具有相同的数据和索引。
我不知道如何填充集合,但您可以使用ListBoxItem的Tag属性来存储图像引用。选择后,只将标记值投射到对象。
如何将项目加载到列表框中?您最好将数组对象加载到列表框中,然后重写ToString()方法以提供您在列表框中查找的字符串。
例如,如果我的列表框中有人,我可以这样做:
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
Person p = new Person { FirstName = "John", LastName = "Doe", ID = Guid.NewGuid().ToString()};
listBox1.Items.Add(p);
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(((Person)listBox1.SelectedItem).ID);
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string ID { get; set; }
public override string ToString()
{
return LastName + ", " + FirstName + " - " + ID;
}
}