должно ли изменение родителя списка изменить выбранный индекс? - PullRequest
0 голосов
/ 22 марта 2012

Вы бы так не думали, но это происходит, когда список привязан к источнику данных (насколько я вижу).

Я сократил поведение до кода ниже.Строка «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 голосов
/ 23 марта 2012

Правильный способ добавления элемента управления в форму - это не установить его родительский элемент, а добавить его в коллекцию Controls формы. Если я делаю так, я не получаю исключения (три последние строки закомментированы, как вы пишете в своем комментарии).

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