vb.net - 从组合框类中按索引获取值
问题描述
我正在从 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 等,我将学习一种获取所有这些值的方法。我希望我很清楚提前谢谢
解决方案
如果您有一个DataSource
设置为 a DataTable
,ComboBox
只需设置DisplayMember
and 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
推荐阅读
- java - Android WebView 进度条+滑动刷新
- javascript - 仅使用 javascrip 检查音频文件是否存在
- javascript - Firebase - AngularJS - 通过子值/键/名称获取父级
- c - 在 sudo 中运行程序时将目录的所有权更改为用户
- c# - 应用程序未正确运行 - 启用了自定义 Web 代理
- jenkins - Jenkins 脚本化管道 - switch 语句中的变量更改未反映在管道步骤中
- php - 本地化帖子 ID 导致 Wordpress 错误
- azure-devops - Azure DevOps 多阶段管道错误:找不到具有指定模式的包:/home/vsts/work/1/s/**/*.zip - 如何修复?
- c++ - 关于复制赋值和删除操作符的问题
- html - 还剩 2 个 div 和 1 个个人