Vb.net 关于Visual Basic 2012中的My.Controls

Vb.net 关于Visual Basic 2012中的My.Controls,vb.net,Vb.net,所以我有一个图片盒,我想四处移动。如果我这样说的话 Dim x,y as integer Dim boxname as string = "picturebox1" x = 10 y = 10 Me.Controls(boxname).Location = New Point(x,y) 我犯了个错误。如何通过变量间接调用控件?Me.Controls表示直接在表单本身的Controls()集合中查找控件(因为“Me”引用表单)。如果PictureBox位于不同的容器中,如面板或分组框,则无法找到

所以我有一个图片盒,我想四处移动。如果我这样说的话

Dim x,y as integer
Dim boxname as string = "picturebox1"
x = 10
y = 10
Me.Controls(boxname).Location = New Point(x,y)

我犯了个错误。如何通过变量间接调用控件?

Me.Controls
表示直接在表单本身的Controls()集合中查找控件(因为“Me”引用表单)。如果PictureBox位于不同的容器中,如面板或分组框,则无法找到它。将“Me”更改为正确容器的名称,例如“Panel1”或“GroupBox1”:

如果您需要一个不指定正确容器的解决方案,请按如下方式搜索:

Dim matches() As Control = Me.Controls.Find(boxname, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is PictureBox Then
    Dim pb As PictureBox = DirectCast(matches(0), PictureBox)
    pb.Location = New Point(x,y)
End If

如果错误消息是机密信息,请重试?我们猜猜要修正什么错误好吗?对不起,我忘了包括在内。错误是“对象引用未设置为对象的实例”@ourmandave我相信问题出在Me上。控制使用,而不是框的location命令。
Dim matches() As Control = Me.Controls.Find(boxname, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is PictureBox Then
    Dim pb As PictureBox = DirectCast(matches(0), PictureBox)
    pb.Location = New Point(x,y)
End If