为组合框项目赋值

问题描述 投票:0回答:2

我目前正在尝试为 winform 的货币制作一个下拉框(组合框)。这是我到目前为止所拥有的:

但我注意到下拉框的数据绑定版本有一个特殊的选项。所以我想知道是否可以创建与此类似的东西,而无需对整个字符串进行比较或在数据库中创建表。

.net vb.net winforms combobox
2个回答
2
投票

列表和组合框可以包含对象而不仅仅是字符串。您可以将

List(Of T)
(以及其他)设置为
DataSource
,而不是在设计器中定义内容。这允许您显示一件事但获取不同的东西,例如返回值。

这非常有用,有一个简单的

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)

输出:

选择已更改!物品:ziggy (26) 价值:26
选择已更改!物品:查理 (3) 价值:3
选择已更改!物品:能够 (1) 价值:1

备注:
NameValuePair 类的好处是它将数据保存在一起(并且易于访问),而不是作为不同数组中的单独项目。

使用

DataSource
的主要好处是您不需要复制数据。
Name
使用与您的代码相同的
,而不是将列表中的 
Items
 值复制到 
List/ComboBox 集合。

SelectedItem

 返回一个 
NVP
 对象(与 
.Items(n)
 一样),但它们以 
Object
 返回,因此您需要将其强制转换回 
NameValuePair
 才能访问任何属性:

thisItem = CType(ComboBox1.SelectedItem, NVP) Console.WriteLine(thisItem.Name)

SelectedItem.ToString

 在我们的 Type 上调用 
ToString
 方法。它可能只是打印 
Name
 或您想要的任何内容。

如果

list 是动态的 - 可以添加和/或从中删除内容 - 那么您可能需要使用 BiningList(of T)

 来代替。对 
list 的更改将自动显示在控件中(ListBox
ComboBox
DatagridView
)。

如果列表

items 是动态的 - {"ziggy", 26} 可能更改为 {"zulu", 98},那么您的项目类应该实现 INotifyPropertyChanged

,以便这些更改也会自动显示在 UI 控件中。


0
投票

在此输入图片描述

当我们将展平值应用为 true 时,如何在组合框字段内显示选定的索引值

© www.soinside.com 2019 - 2024. All rights reserved.