使用 Me.Controls() 函数更改子对象的属性时出现问题

Issues with changing a child object's properties using the Me.Controls() function

我在 vb.net 中(更具体地说,在 VB.net Windows 表单应用程序中)的子对象和父对象存在一个大问题。

对于这段代码,我使用 Me.Controls() 函数非常重要,因为它允许我存储一个与对象同名的字符串,并从该字符串调用该对象。

        Public PieceArray(7) As PictureBox
        PieceArray(0) = WK1
        PieceArray(1) = WQ1
        PieceArray(2) = WB1
        PieceArray(3) = WB2
        PieceArray(4) = WN1
        PieceArray(5) = WN2
        PieceArray(6) = WR1
        PieceArray(7) = WR2
        For x = 0 To 7
            Checkerboard.Controls.Add(PieceArray(x))
        Next
        Me.Controls(WR1).Location = New Point(0,0)

但是,我发现一旦将对象分配给父对象,我就无法访问这些对象。我尝试了多行,例如:

'Me.Controls(WR1).Location = New Point(0,0)
'Me.Controls("WR1").Location = New Point(0,0)
'Me.Controls(Checkerboard(WR1)).Location = New Point(0,0)
'Checkerboard.Controls(WR1).Location = New Point(0,0)
'Checkerboard.Controls("WR1").Location = New Point(0,0)

但是,同样的问题仍然存在。请问有人可以就此给我建议吗?

非常感谢, 阿尔菲

注意:如果我把行

Me.Controls("WR1").Location = New Point(0,0)

在 for 循环之前,代码执行完美,这意味着 Me.Controls() 可以处理变量名称的字符串,但不适用于具有父项的字符串。

Control.Controls 仅 returns 直接包含在 Control 中的控件。为了使用控件 属性,您需要 运行“parents”而不是 Me。相反,您可以使用 Control.Controls.Find 函数

Me.Controls.Find(WR1, True).Single().Location = New Point(0, 0)
' True as the second argument indicates you want to search all children