Vb.net VS 2010 VB在窗体上查找控件

Vb.net VS 2010 VB在窗体上查找控件,vb.net,forms,winforms,visual-studio-2010,Vb.net,Forms,Winforms,Visual Studio 2010,我女儿有学校作业,正在做一个蛇和梯子游戏,她用标签创建了一个7 x 7的网格。当她想设置球员的位置时,她有多个if语句,我知道有一种更快更有效的方法。但我已经有好几年没有玩VS2010了 基本上我认为我应该可以做这样的事情 Form.FindControl("Label"+player1position).Text = "x" 而不是做 if player1position = 1 then label1.text = "x" end if if player1position = 2

我女儿有学校作业,正在做一个蛇和梯子游戏,她用标签创建了一个7 x 7的网格。当她想设置球员的位置时,她有多个if语句,我知道有一种更快更有效的方法。但我已经有好几年没有玩VS2010了

基本上我认为我应该可以做这样的事情

Form.FindControl("Label"+player1position).Text = "x"
而不是做

if player1position = 1 then
   label1.text = "x"
end if
if player1position = 2 then
   label2.text = "x"
end if

等等。

当然,假设使用WinForms,您可以执行以下操作:

Dim matches() As Control = Me.Controls.Find("Label" + player1position, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
    Dim lbl As Label = DirectCast(matches(0), Label)
    lbl.Text = "x"
End If
Me.Controls("Label" + player1position).Text = "x"
上面的代码段将找到标签,不管它嵌套得有多深,如果它们在不同的容器中,也会找到它们

如果标签都在同一个容器中,则可以将其缩短为如下内容:

Dim matches() As Control = Me.Controls.Find("Label" + player1position, True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then
    Dim lbl As Label = DirectCast(matches(0), Label)
    lbl.Text = "x"
End If
Me.Controls("Label" + player1position).Text = "x"
如果标签直接位于表单上,则可以找到该标签。对于其他容器,请将“Me”替换为名称,例如“Panel1”:


谢谢,这是一个很大的帮助!