.net ComboBox.Items.IndexOf始终返回-1

.net ComboBox.Items.IndexOf始终返回-1,.net,winforms,combobox,.net,Winforms,Combobox,我在运行时创建了一个组合框,并将数据源设置为通用列表。当我调用combobBox.Items.IndexOf来设置SelectedIndex属性时,它总是返回-1。该值包含在数据源中,因此它应该能够找到索引 这是我使用的代码的一个示例 Private Function InitDomainCombo(ByVal value as object, ByVal domainList As List(Of DomainNameValue)) As ComboBox Dim cb As Comb

我在运行时创建了一个
组合框
,并将
数据源
设置为通用列表。当我调用
combobBox.Items.IndexOf
来设置
SelectedIndex
属性时,它总是返回
-1
。该值包含在
数据源中,因此它应该能够找到索引

这是我使用的代码的一个示例

Private Function InitDomainCombo(ByVal value as object, ByVal domainList As List(Of DomainNameValue)) As ComboBox
    Dim cb As ComboBox

    cb = New ComboBox
    cb.DropDownStyle = ComboBoxStyle.DropDownList
    cb.DataSource = domainList
    cb.DisplayMember = "Name"

    cb.SelectedIndex = cb.Items.IndexOf(CType(value, DomainNameValue))

    Return cb
End Function

我猜您试图选择一个尚不存在的项目

尝试:

  • 在设置
    selectedIndex
    之前,将
    组合框添加到表单中
  • 在设置
    selectedIndex
    之前,使用
    combox.CreateControl()
    方法强制初始化控件

此线程与一个类似的问题相关:

我猜您试图选择一个尚不存在的项目

尝试:

  • 在设置
    selectedIndex
    之前,将
    组合框添加到表单中
  • 在设置
    selectedIndex
    之前,使用
    combox.CreateControl()
    方法强制初始化控件

此线程与一个类似的问题相关:

显然,它不在这里。我已经检查了domainList.Contains(CType(value,DomainNameValue))以确保值在domainList中。您是否尝试过cb.Items.Contains(CType(value,DomainNameValue))
Items
集合是否为空?我不确定
组合框
何时会将对象从其数据源拉入其
集合,可能这还没有发生。显然,它不在那里。我已经用domainList.Contains(CType(value,DomainNameValue))进行了检查,以确保值在domainList中。您尝试过cb.Items.Contains(CType)吗(值,域名值)
Items
集合是否可能为空?我不确定
ComboBox
何时会将对象从其数据源拉入其
Items
集合,可能还没有发生。我已将数据源更改为将对象直接添加到ComboBox。无法使用combox.CreateControl()因为ComboBox是正在创建begin过程中的部分usercontrol。我将数据源更改为将对象直接添加到ComboBox。无法使用combox.CreateControl(),因为ComboBox是正在创建begin过程中的部分usercontrol。