2014-04-07 32 views
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中的人,但感觉像有一些更好/更漂亮的方式做到这一点?

​​

回答

1

这应该有效。谨防sintax错误,我没有试过

dim index as integer 
dim done as boolean 
while not done andalso not index = ListBox_Users.items.count -1 
If ListBox_Users.items(index).Email = TheEmailRegistredForTheSelectedCar Then 
    done = true 
else 
    index +=1 
End If 
end while 
if done then 
Listbox_Users.selectedindex = index 
end if 
+0

啊!尼斯想用索引代替对象。这几乎就像我编辑的解决方案一样,但是感觉问题比问题的“更好的”解决方案要比循环全部并检查之后是否有匹配。 – gubbfett

+0

您可以将车主字段添加到指向人物对象的汽车,然后执行Listbox_Users.selecteditem = car.owner。但取决于你的代码,你可能无法做到这一点 – Hamster

+0

这实际上是一个非常不错的解决方案,阅读起来更好。这是几乎相同的问题,因为我仍然需要循环列表框并检查匹配的电子邮件以获取该车的所有者,但将该车设置为.Owner的人员仍然更漂亮。谢谢! :-) – gubbfett

相关问题