vb.net – IndexOf ComboBox对我不起作用

前端之家收集整理的这篇文章主要介绍了vb.net – IndexOf ComboBox对我不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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有关,实际上我正在搜索一个整数的枚举.不知道我是否有这个权利.无论如何,我似乎无法选择默认项目.我可以尝试另一种方法吗?

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

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

Dim dUnits As New Dictionary(Of String,eUnits)

>将整数保留在Dictionary中,但在搜索ComboBox时使用枚举的整数值:

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

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

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

cbo.SelectedValue = defUnits

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

cbo.SelectedValue = CInt(defUnits)

猜你在找的VB相关文章