[英]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.