2012-03-22 48 views
0

你不会这么想,但是当列表框绑定到数据源时(就我所见),它会执行此操作。应该更改列表框的父级更改选定的索引?

我已经将行为简化为下面的代码。 “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 
+0

您是否为Microsoft工作?他们认为他们知道我想做什么或应该做得比我做得更好。 – DJDave 2012-03-22 13:42:57

+0

我可以重新构造问题,以便不需要更改父项。注释掉第一个.parent =行,最后三行(以表格的形式等等)。为什么数据绑定列表在选定索引设置且手动索引不存在时抛出错误? – DJDave 2012-03-22 13:57:14

+0

可能是没有意义的,但改变父母是否有意义? (替换并纠正我以前的评论) – 2012-03-22 20:55:28

回答

0

添加控件到窗体的正确的方法是不是要设置其母公司,而是将其添加到收藏Controls形式。如果我这样做,我不会得到一个例外(当您在评论中写下时,最后三行注释掉了)。

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

感谢您的建议。我认为这两个陈述是相同的,但这只是一个假设。尽管如此,如果您注释掉第一个.parent =行(不是用me.controls.add替换它),但在设置databound列表的selectedindex时仍然存在错误,但不会显示“manual “列表。为什么列表必须是表单的Controls集合的成员才能使selectedindex适用于数据绑定列表,但不适用于手动填充列表? – DJDave 2012-03-23 10:23:32

+0

在调试器中,我看到ListBox的'Items'集合没有被填充,当使用一个ListBox没有附加到表单的数据绑定列表时。我不知道为什么;这只是它实施的方式。世界并不完美。 – 2012-03-23 14:12:07

+0

谢谢您确认。欣赏你的时间。现在我知道Listbox在这些情况下做了什么并且不会做什么,我会相应地进行编码。 – DJDave 2012-03-28 11:23:59