0

我有一个激活了多项选择的列表框,我正在尝试读取不同的选定值

我尝试了很多片段,这是最新的两个:

 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

由于某种原因,我选择的任何方法我都无法读取任何项目的价值

我的列表框是数据绑定的,所以我在一个论坛上发现,将其公开可能会解决问题,但它没有

我很犹豫,因为即使 Intellisense 也没有显示太多信息,我得到的只是:

Equals
GetHashCode
GeType
ReferenceEquals
ToString

有什么想法我哪里出错了吗?

提前致谢

编辑:

在此处输入图像描述

4

2 回答 2

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的遗留物。

于 2012-07-23T02:03:36.390 回答
1

当您使用 databoundListBox时,这些项目不是ListBoxItem对象(您希望拥有这些对象TextValue属性)。相反,它们是来自数据源的类型。Items集合(及其变体,例如)被定义为对象的SelectedItems集合,运行时类型是从数据源中获取的。你有没有尝试过这样的事情?

For i = 0 To ListBox1.SelectedItems.Count
    MsgBox(ListBox1.SelectedItems(i).ToString())
Next

在评论中,您指出数据源是包含对象的 DBString对象。如果你有一个类的集合,比如Person,你可以这样得到:

For i = 0 To ListBox1.SelectedItems.Count
    MsgBox(DirectCast(ListBox1.SelectedItems(i), Person).FirstName)
Next

For Each只要在循环时未更改所选项目集合,您还应该使用 a 获得相同的结果。

For Each p As Person in ListBox1.SelectedItems
    MsgBox(p.FirstName)
Next

注意:这是未经测试的代码,因为我现在不在 Visual Studio 前面。

编辑: 我从屏幕截图中看到Value Member设置为名为Id. 如果那是uniqueidentifier数据库中的一列,那么 ListBox 中的运行时类型应该是Guid.

于 2012-07-23T02:03:26.597 回答