IndexOf ComboBox对我不起作用

时间:2012-11-16 00:41:25

标签: vb.net dictionary combobox enumeration indexof

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存储值作为字符串有关,实际上我正在搜索一个整数的枚举。不知道我是否有这个权利。无论如何,我似乎无法选择默认项目。我可以尝试另一种方法吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

  3. 但是这还不行。您与Dictionary数据绑定,这意味着cbo.Items中的项目不是枚举类型,而是词典中元素的类型({{ 1}}假设#1在上面)。

    最简单的解决方案是设置组合框的KeyValuePair(Of String, eUnits)属性而不是SelectedValue。假设你使用了上面的选项#1,那就是:

    SelectedIndex

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

    cbo.SelectedValue = defUnits