gpt4 book ai didi

vb.net - IndexOf a ComboBox 对我不起作用

转载 作者:行者123 更新时间:2023-12-03 01:33:00 27 4
gpt4 key购买 nike

VB2010。我正在尝试使用单位枚举的内容填充组合框。我已经成功地用字典做到了这一点。类似的东西

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. 将枚举值存储在字典中而不是字符串中:

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

    Dim idx As Integer = cbo.Items.IndexOf(CInt(defUnits))
<小时/>

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

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

cbo.SelectedValue = defUnits

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

cbo.SelectedValue = CInt(defUnits)

关于vb.net - IndexOf a ComboBox 对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408741/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com