应该更改列表框的父级更改所选索引?

时间:2012-03-22 12:38:19

标签: vb.net listbox selectedindex

您不会这么认为,但是当列表框绑定到数据源时(就我所见),它会这样做。

我已将行为简化为以下代码。 “if”行在通过数据绑定加载列表和“手动”加载列表之间切换(两者都使用相同的数据表)。在每种情况下,我之后设置选定的索引,然后更改父窗体。使用手动加载时,将保留所选索引,并且绑定会丢失。我看不出这有什么意义 - 我不明白为什么更改主机表单应该改变列表的任何属性。这是一个错误吗?

Public Class Form1
    Sub main() Handles Me.Load
        Dim ListControl1 As ListBox = New ListBox
        ListControl1.Parent = Me
        Dim dt = New DataTable
        dt.Columns.Add("intColourID")
        dt.Columns.Add("strName")
        dt.Rows.Add({1, "Red"})
        dt.Rows.Add({2, "Green"})
        dt.Rows.Add({3, "Blue"})

        ListControl1.ValueMember = dt.Columns(0).ColumnName
        ListControl1.DisplayMember = dt.Columns(1).ColumnName
        If False Then
            ListControl1.DataSource = dt
        Else
            For i = 0 To dt.Rows.Count - 1
                ListControl1.Items.Add(dt.Rows(i)("strName").ToString)
            Next
        End If
        ListControl1.SelectedIndex = 2
        Dim z As Form = New Form
        ListControl1.Parent = z
        z.Show()
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

向表单添加控件的正确方法不是设置其父级,而是将其添加到表单的Controls集合中。如果我这样做,我不会得到一个例外(当你在评论中写下时,最后三行被注释掉了。)

Me.Controls.Add(ListControl1)   ' Instead of ListControl1.Parent = Me