我有一个激活了多个选择的列表框,我正在尝试读取不同的选定值
我尝试了很多片段,这里有最新的两个片段:
For i = 0 To ListBox1.SelectedIndices.Count
MsgBox(ListBox1.Items((ListBox1.SelectedIndices(i))).value)
Next
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(ListBox1.SelectedItems(i).value)
Next
出于某种原因,我选择的任何方法都无法读取任何项目的价值
我的列表框是数据绑定的,所以我在论坛上发现将其公开可能会解决问题,但它没有
我很犹豫,因为即使智能感知没有显示太多信息,我得到的只是:
Equals
GetHashCode
GeType
ReferenceEquals
ToString
我出错的任何想法?
提前致谢
修改
答案 0 :(得分:2)
我不是在VB中使用Data GUI工具的忠实粉丝。那就是说,我认为你在寻找的是:
For Each dvRow As DataRowView In Me.Listbox1.SelectedItems
MessageBox.Show(dvRow("Id").ToString)
Next
如果您对“姓氏”字段感兴趣,请将“Id”更改为“姓氏”。
另外,我使用MessageBox.Show
代替MsgBox
。 MsgBox
是VB6的遗留物。
答案 1 :(得分:1)
当您使用数据绑定ListBox
时,这些项目不是ListBoxItem
个对象(您希望它们具有Text
和Value
属性)。相反,它们是数据源中的类型。 Items
集合(及其变体,例如SelectedItems
)被定义为对象集合,运行时类型是从数据源获得的。你尝试过这样的事吗?
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(ListBox1.SelectedItems(i).ToString())
Next
在注释中,您指出数据源是包含String
个对象的DB对象。如果你有一组类,例如Person
,你可以这样得到它:
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(DirectCast(ListBox1.SelectedItems(i), Person).FirstName)
Next
只要在循环播放时未更改所选项目集合,您也应该使用For Each
获得相同的结果。
For Each p As Person in ListBox1.SelectedItems
MsgBox(p.FirstName)
Next
注意:这是未经测试的代码,因为我目前不在Visual Studio前面。
编辑:我从屏幕截图中看到,Value Member
设置为名为Id
的属性。如果这是数据库中的uniqueidentifier
列,则ListBox中的运行时类型应为Guid
。