VB2010。我正在尝试使用Enumeration单位的内容填充ComboBox。我已经设法用词典做到了这一点。像
这样的东西Dim dUnits As New Dictionary(Of String, Integer)
Dim da As String
For Each enumValue As eUnits In System.Enum.GetValues(GetType(eUnits))
da = ConvertEnumToCommonName 'gets unique name for an enumeration
dUnits.Add(da, enumValue)
Next
cbo.DisplayMember = "Key" 'display the the common name
cbo.ValueMember = "Value" 'use the enumeration as the value
cbo.DataSource = New BindingSource(dUnits, Nothing)
当我加载效果很好的表单时现在,用户可以选择要显示的默认单位。那么我试试
Dim defUnits As eUnits = eUnits.Feet
Dim idx As Integer = cbo.Items.IndexOf(defUnits) 'doesnt work, returns a -1
cbo.SelectedIndex = idx
我已经做了一段时间的研究,并且相当肯定这与ComboBox
存储值作为字符串有关,实际上我正在搜索一个整数的枚举。不知道我是否有这个权利。无论如何,我似乎无法选择默认项目。我可以尝试另一种方法吗?
答案 0 :(得分:3)
首先,你有一个整数集合,你正在搜索枚举值。为此,请尝试以下方法之一:
将枚举值存储在字典中而不是字符串中:
Dim dUnits As New Dictionary(Of String, eUnits)
将整数保留在Dictionary中,但在搜索ComboBox时使用枚举的整数值:
Dim idx As Integer = cbo.Items.IndexOf(CInt(defUnits))
但是这还不行。您与Dictionary
数据绑定,这意味着cbo.Items
中的项目不是枚举类型,而是词典中元素的类型({{ 1}}假设#1在上面)。
最简单的解决方案是设置组合框的KeyValuePair(Of String, eUnits)
属性而不是SelectedValue
。假设你使用了上面的选项#1,那就是:
SelectedIndex
如果您使用选项#2,则必须先将其转换为整数:
cbo.SelectedValue = defUnits