在面板上动态添加控件时的奇怪行为

还没有

[使用VB.NET 2010 / Winforms]

注意:我的实际项目比下面发布的代码复杂/有用(下面的代码只是再现奇怪行为所需的最小测试用例)。

OK ...在设计器中,我将两个大小相等的大面板放在一个名为“ ContainerA”和“ ContainerB”的窗体上,以及一个按钮(Button1)。我在ContainerA内放置了5个小的彩色面板(分别命名为RedPanel,BluePanel,GreenPanel等)。

ContainerB内无任何内容。

单击Button1时,我想做的是将ContainerA中的全部5个彩色小面板动态地放入ContainerB中。简单吧?但是出于某些奇怪的原因,它只将其中三个面板放到ContainerB中!(并将剩下的2个面板留在ContainerA中!

这到底是怎么回事?这是我多年来在.NET中编写代码以来见过的最奇怪的事情之一!

这是我的按钮单击事件的代码...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    For Each ColorBlock As Panel In ContainerA.Controls
        ContainerB.Controls.Add(ColorBlock)
    Next

End Sub

有任何想法吗?在我的真实项目以及我上面发布的简单测试项目中,我都得到了相同的奇怪(意想不到的)行为,因此VB中发生了一些奇怪的事情。

希望有人能对此有所启发,这样我就可以不再将可怜的头撞在墙上,试图找出解决方案!:/

约翰·科纳

您正在从循环中的集合中删除控件,因此一旦删除了一半以上的控件,循环将退出。为了防止这种情况,请向后循环遍历控件:

For i As Integer = ContainerA.Controls.Count - 1 To 0 Step -1
    Dim ColorBlock As Control = Panel1.Controls(i)
    ContainerB.Controls.Add(ColorBlock)
Next

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章