5

VB2010。我正在尝试使用单位枚举的内容填充 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将值存储为字符串有关,实际上我正在寻找一个整数枚举。不知道我有没有这个权利。无论如何,我似乎无法选择默认项目。我可以尝试另一种方法吗?

4

1 回答 1

3

首先,您有一个整数集合,并且您正在搜索枚举值。为此,请尝试以下方法之一:

  1. 将枚举值存储在字典中而不是字符串中:

    Dim dUnits As New Dictionary(Of String, eUnits)
    
  2. 将整数保留在 Dictionary 中,但在搜索 ComboBox 时使用枚举的整数值:

    Dim idx As Integer = cbo.Items.IndexOf(CInt(defUnits))
    

但这还行不通。您是数据绑定到 a Dictionary,这意味着其中的项目cbo.Items不是枚举类型,而是Dictionary 中元素的类型KeyValuePair(Of String, eUnits)假设上面的#1)。

最简单的解决方案就是设置SelectedValue组合框的属性而不是SelectedIndex. 假设您使用了上面的选项#1,这将是:

cbo.SelectedValue = defUnits

如果您改用选项 #2,则必须先将其转换为整数:

cbo.SelectedValue = CInt(defUnits)
于 2012-11-16T00:46:44.580 回答