如何在VB.NET中为组合框赋值?

如何在VB.NET中为组合框赋值?,vb.net,combobox,Vb.net,Combobox,我有一个名为cbxType的组合框项目。 此组合框包含以下内容: cbxType.DataSource=[Enum].GetValues(GetType(Customer.CustomerType)) 其中Customer.CustomerType是一个枚举: 公共枚举客户类型 零售业 个体经营者 单位 结束枚举 这在填充字段时效果很好,但是在代码的后面,我如何为combobox指定一个给定的值呢 我试过: cbxType.ValueMember=0 但我得到: System.Argume

我有一个名为
cbxType
的组合框项目。 此组合框包含以下内容:

cbxType.DataSource=[Enum].GetValues(GetType(Customer.CustomerType))
其中
Customer.CustomerType
是一个枚举:

公共枚举客户类型
零售业
个体经营者
单位
结束枚举
这在填充字段时效果很好,但是在代码的后面,我如何为combobox指定一个给定的值呢

我试过:

cbxType.ValueMember=0
但我得到:

System.ArgumentException:'无法绑定到新的显示成员。
参数名称:newDisplayMember'

当组合框绑定到某个简单实体(如枚举X)的集合时

  • 组合框中显示的内容是
    X.ToString()
    返回的字符串,在本例中,该字符串返回枚举文本名,然后
  • 作为值返回的东西,显示的是组合,是X
因此,要更改组合显示的内容,请将组合的
.SelectedValue
设置为类型为X的对象。在这种情况下,X将是枚举成员之一:

cbxType.SelectedValue = CustomerType.SelfEmployed
ValueMember
(及其合作伙伴
DisplayMember
)用于指示您希望组合用于显示和所选值的复杂对象的哪个属性

例如,如果您已将您的组合绑定到一个
列表(个人)
,并且一个人除其他外具有全名和电子邮件属性,则您可以设置
DisplayMember=“FullName”
以使列表显示“John Smith,Jane Doe..”等,并且您可以设置一个
ValueMember=“Email”
,以便在选择John Smith时,调用SelectedValue可能会返回“John”。smith@example.com"


SelectedItem将是整个Person对象。SelectedIndex将是所选项目的数字索引,在组合框显示的项目列表中,但请记住,在某些情况下,所显示的列表可以按与基础集合不同的顺序排序

我建议您阅读组合框的属性,您肯定会找到您需要的:)SelectedItem有效,那么,SelectedValue和SelectedValue之间有什么区别呢?在这种情况下,差别不大。请参阅我的答案的结尾,以防对其他人有所帮助,如果您使用的是
0
,则答案将是
cbxType.SelectedItem=0
。谢谢你的回答,这对我很有帮助,让我开始使用集合。你真的应该使用枚举成员名,而不是碰巧与枚举成员关联的int。枚举不必从0开始,如果您重构代码使Retail不再是0(可能您删除了Retail,但希望将SelfEmployed保留为1等),那么使用该名称将是一个编译器错误,您可以修复它。设置0将以静默方式编译,但组合将不再选择要开始的项,因为0不再在枚举中->使用枚举名称以充分利用我们首先使用枚举的全部原因(以避免代码中出现幻数),感谢您的精心设计。使用这些数字的原因是我正在使用整数字段将枚举存储在数据库中。没有问题。在代码中,无论数据是如何存储的,都应该使用枚举名称。(还有一些方法可以将字符串名称存储在数据库中,并在拉出时进行转换,从而使数据库更具可读性)