【发布时间】:2016-08-18 16:19:42
【问题描述】:
我已经将一个 ComboBox 绑定到一个像这样的枚举
Enum Foo
Bar
Baz
End Enum
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FooComboBox.DataSource = [Enum].GetValues(GetType(Foo))
End Sub
我想在给定时间更改所选值
Private Sub FooBar()
FooComboBox.SelectedValue = Foo.Bar
End Sub
但这会引发异常:
System.Windows.Forms.dll 中出现“System.InvalidOperationException”类型的未处理异常
附加信息:无法在具有空 ValueMember 的 ListControl 中设置 SelectedValue。
检查 ComboBox 我确实可以看到 ValueMember 属性为空。但是SelectedValue is 等于我阅读它时当前选定项目的预期值,这表明ValueMember is 设置为枚举值预计。
A)如果ValueMember属性没有设置,SelectedValue中的值是从哪里来的?
B) 如果绑定导致SelectedValue 包含正确的值,为什么翻转设置不以同样的方式工作?
C) 我还需要做什么才能使这个该死的 .Net 正常工作?
请注意,确实有很多关于此的 C# 和 WPF 问题,据我所见,没有一个能真正解释这一点,而且我无法从答案建议他们。
【问题讨论】:
-
我可以使用
SelectedIndex来达到预期的效果,但是这是因为巧合的是,项目的索引与枚举值匹配。当枚举值与索引不同时会发生什么? -
FooComboBox.SelectedItem = Foo.Bar当它们不是简单的 {0,1,2} 值时,使用 Type 来设置 Value 和 Displaymember -
@Plutonix,如何“使用 Type 设置 Value 和 DisplayMember”?
-
有Assigning a value to ComboBox Items使用Enum.Names和ENum.Values;还有Set DisplayMember and ValueMember on ComboBox without DataSource,这使得它比“无数据源”要求更复杂
-
啊,你的意思是使用复杂类型的集合并绑定到那个......对于一个简单的简短、常量、数字列表来说有点多,不是吗?天哪,我讨厌 VB。
标签: .net vb.net combobox enums