簡體   English   中英

為ComboBox項目分配值

[英]Assigning a value to ComboBox Items

我目前正在嘗試為Winform制作用於貨幣的投幣箱(Combobox)。 這是我到目前為止的內容:

組合框輸入的屏幕抓取

但我注意到下拉框的數據綁定版本有一個特殊選項。 因此,我想知道是否有可能創建類似於此的內容而無需訴諸於整個字符串的比較或在數據庫中創建表。

組合框任務的屏幕截圖

列表和組合框可以包含對象,而不僅僅是字符串。 您可以將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) 列表所做的更改將自動顯示在控件( ListBoxComboBoxDatagridView )中。

如果列表是動態的-{“ ziggy”,26}可能會更改為{“ zulu”,98},則您的項類應實現INotifyPropertyChanged以便這些更改也自動顯示在UI控件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM