首页 > 解决方案 > 从组合框类中按索引获取值

问题描述

我正在从 vb6 接近 vbnet,我正在尝试使用包含我存储的值的类从组合框中获取值。这里是类

        Private m_ItemText As String
        Private m_ItemIndex As Int32

        Public Sub New(ByVal strItemText As String, ByVal intItemIndex As Int32)
            m_ItemText = strItemText
            m_ItemIndex = intItemIndex
        End Sub

        Public ReadOnly Property ItemIndex() As Int32
            Get
                Return m_ItemIndex
            End Get
        End Property

    Public ReadOnly Property ItemText() As String
        Get
            Return m_ItemText
        End Get
    End Property

我用这个方法给组合框充电

        ComboBox2.Items.Add(New clsComboBoxItem("sometext", 1))
        ComboBox2.Items.Add(New clsComboBoxItem("sometext 2", 2))
        ComboBox2.Items.Add(New clsComboBoxItem("sometext", 3))

这在 combobox.selectedindexchanged

        If ComboBox2.SelectedItem.GetType.ToString = itmCombo.GetType.ToString Then
            itmCombo = CType(ComboBox2.SelectedItem, clsComboBoxItem)
            MessageBox.Show("Item Text=" & itmCombo.ItemText & " and ItemIndex=" & CStr(itmCombo.ItemIndex))

        End If

谁能告诉我如何通过存储在类中的索引来获取元素?例如,将“2”写入文本框,组合框应显示“sometext2”。假设我想扩展类添加一些值,如 m_ItemText2、m_ItemText3 等,我将学习一种获取所有这些值的方法。我希望我很清楚提前谢谢

标签: vb.netvisual-studiocomboboxlistboxitem

解决方案


如果您有一个DataSource设置为 a DataTableComboBox只需设置DisplayMemberand ValueMember。我的测试 ComboBox 设置为DropDownList.

Private Sub FillComboBox()
    Dim dt As New DataTable
    Using con As New SqlConnection(ConStr),
        cmd As New SqlCommand("Select FlavorID,FlavorName From Flavors", con)
        con.Open()
        Using reader = cmd.ExecuteReader
            dt.Load(reader)
        End Using
    End Using

    ComboBox1.DisplayMember = "FlavorName"
    ComboBox1.ValueMember = "FlavorID"
    ComboBox1.DataSource = dt
End Sub

显示值 要将 Text 转换为 DataRowView(即 中的对象Item),请提供所需的字段并调用 ToString。

Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    MessageBox.Show(ComboBox1.SelectedValue.ToString)
    MessageBox.Show(DirectCast(ComboBox1.SelectedItem, DataRowView)("FlavorName").ToString)
End Sub

如果是逐个添加项目,仍然可以设置 DisplayMember 和 ValueMember。

'https://stackoverflow.com/questions/38206678/set-displaymember-and-valuemember-on-combobox-without-datasource
 Private Sub SomeFormsLoadEvent()
    ComboBox1.Items.Add(New KeyValuePair(Of String, Integer)("Ultra-fast", 600))
    ComboBox1.Items.Add(New KeyValuePair(Of String, Integer)("Fast", 300))
    ComboBox1.Items.Add(New KeyValuePair(Of String, Integer)("Medium", 150))
    ComboBox1.Items.Add(New KeyValuePair(Of String, Integer)("Slow", 75))

    ComboBox1.DisplayMember = "Key"
    ComboBox1.ValueMember = "Value"
    ComboBox1.DataSource = ComboBox1.Items
End Sub

我发现显示文本有点复杂。我必须将项目转换为它的基础类型(KeyValuePair),然后询问 Key 值。

Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    MessageBox.Show(ComboBox1.SelectedValue.ToString)
    MessageBox.Show(DirectCast(ComboBox1.SelectedItem, KeyValuePair(Of String, Integer)).Key)
End Sub

推荐阅读