1
我有一个包含一些对象的列表框。在这种情况下,“人”,像这样:从ListBox中选择/高亮显示对象会抛出错误
Public Class Person
Public ID As Integer
Public Name As string = ""
Public Email As string = ""
Public Sub New(ByVal ID As Integer)
Me.ID = ID
GetPersonInfo()
End Sub
Private Sub GetPersonInfo()
'some stuff gathering info
Me.Name = 'From some stuff
Me.Email= 'From some stuff
End Sub
Public Overrides Function ToString() As String
Return "[" & Me.ID & "] " & Me.Name & " - " & Me.Email
End Function
End Class
到目前为止好。当我加载形式,我有一个循环的人加入到列表框,代码看起来是这样的:
For Each UserId As Integer In MyUsersList
ListBox_Users.Items.Add(New Person(UserId))
Next
任何异常。我收到了一个格式为[ID] Name - Email
的人员列表。
如何过,在程序中的其它地方,我可以选择别的东西,像汽车,例如。汽车显示在一个组合框中,当我在此列表中更换汽车时,我收集有关该汽车的信息,然后可以获取车主的电子邮件。如果此电子邮件列在列表框中,我想在列表框中自动选择/突出显示此人。该代码,这看起来是这样的:
For Each P As Person In ListBox_Users
If P.Email = TheEmailRegistredForTheSelectedCar Then
ListBox_Users.SelectedItem = P
End If
Next
当我运行这段代码,我得到的错误“,这枚举绑定已被修改,只能使用一个枚举如果列表不改变该列表。 “。
嗯,是的,我能理解有有鬼循环一个列表框,在这种循环改变其选定的索引,但我应该怎么做正确的在这种情况下?
编辑:目前我我想出了这个代码来选择ListBox中的人,但感觉像有一些更好/更漂亮的方式做到这一点?
啊!尼斯想用索引代替对象。这几乎就像我编辑的解决方案一样,但是感觉问题比问题的“更好的”解决方案要比循环全部并检查之后是否有匹配。 – gubbfett
您可以将车主字段添加到指向人物对象的汽车,然后执行Listbox_Users.selecteditem = car.owner。但取决于你的代码,你可能无法做到这一点 – Hamster
这实际上是一个非常不错的解决方案,阅读起来更好。这是几乎相同的问题,因为我仍然需要循环列表框并检查匹配的电子邮件以获取该车的所有者,但将该车设置为.Owner的人员仍然更漂亮。谢谢! :-) – gubbfett