[英]Assigning a value to ComboBox Items
列表和组合框可以包含对象,而不仅仅是字符串。 您可以将List(Of T)
(以及其他设置)设置为DataSource
,而不是在Designer中定义内容。 这使您可以显示一件事,但获取另一件事,例如返回值。
这是如此有用,拥有一个简单的NameValuePair
类将值或代码转换为用户友好的东西并不少见:
Public Class NVP
Public Property Name As String
Public Property Value As Integer
Public Sub New(n As String, v As Integer)
Name = n
Value = v
End Sub
' what these will display using .ToString:
Public Overrides Function ToString() As String
Return String.Format("{0} ({1})", Name, Value.ToString)
End Function
End Class
然后,代码创建这些列表并将其用作组合的源:
Private myAList As List(Of NVP)
...
myAList = New List(Of NVP)
myAList.Add(New NVP("ziggy", 26))
myAList.Add(New NVP("able", 1))
myAList.Add(New NVP("charlie", 3))
myAList.Add(New NVP("echo", 5))
ComboBox1.DataSource = myAList
ComboBox1.DisplayMember = "Name" ' property name to show the user
ComboBox1.ValueMember = "Value" ' property name to use as the value
然后,使用它:
Console.WriteLine("Selection Changed! Item: {0} Value: {1}",
ComboBox1.SelectedItem.ToString,
ComboBox1.SelectedValue.ToString)
输出:
选择已更改! 项目:齐吉(26)价值:26
选择已更改! 项目:查理(3)价值:3
选择已更改! 项目:能够(1)价值:1
笔记:
NameValuePair类的好处在于,它将数据保持在一起(并易于访问),而不是将它们作为不同数组中的单独项。
使用DataSource
的主要好处是您无需复制数据。 List/ComboBox
不会将Name
值从列表复制到Items
集合,而是使用与代码相同的值 。
SelectedItem
返回一个NVP
对象( .Items(n)
),但是它们作为Object
返回,因此您需要将其NameValuePair
转换回NameValuePair
以访问任何属性:
thisItem = CType(ComboBox1.SelectedItem, NVP)
Console.WriteLine(thisItem.Name)
SelectedItem.ToString
在我们的Type上调用ToString
方法。 它可能只打印Name
或您想要的任何内容。
如果列表是动态的-事物被添加和/或删除-那么您可能会想使用BiningList(of T)
。 对列表所做的更改将自动显示在控件( ListBox
, ComboBox
和DatagridView
)中。
如果列表项是动态的-{“ ziggy”,26}可能会更改为{“ zulu”,98},则您的项类应实现INotifyPropertyChanged
以便这些更改也自动显示在UI控件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.