そうは思わないかもしれませんが、リストボックスがデータソースにバインドされている場合はそうなります(私が見る限り)。
動作を以下のコードに減らしました。「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