C#for Forms Controls是否具有等效的HTML函数getElementById()?

时间:2019-03-30 13:17:20

标签: c# arrays winforms

我们应该在C#Winform应用程序中编写Conway的《人生游戏》。因此,我通过按钮创建了一个10 x 10的“游戏板”。粉色表示已死,蓝色表示还活着。为了便于访问,每个按钮均以其在游戏板上的坐标命名(例如x1y1,x10y9,x5y5)。但是后来我意识到我不知道如何遍历100个表单控件并根据每个人的颜色/值对他们执行操作。在HTML / Javascript中,我使用了以下循环:

for(row = 1; row <= 10; row++){
    board[row] = new Array(10); //creates a 10 by 10 matrix to store the board's values in it.
    for(col = 1; col <= 10; col++){
        var position = "x" + row + "y" + col;
        var val = parseInt(document.board.elements[position].value);
        board[row][col] = val;

    }
}

所以问题是这样的:有没有办法通过字符串而不是变量名来调用表单控件?像Form1.getControlByName(string)之类的东西?

1 个答案:

答案 0 :(得分:1)

您可以设置所创建的每个Button控件的Name属性。例如。让button是对Button控件的引用:

button.Name = "11";

然后,您可以使用Control.ControlCollection.Find方法来查找所需的按钮控件,如下所示:

Button button = this.Controls.Find("11", true).FirstOrDefault() as Button;

this是对Form实例的引用。您需要调用FirstOrDefault,因为Find返回了一个名为"11"的控件数组。最后,您必须使用as运算符将Control对象转换为Button。如果转换失败,则button的值为null。因此,在此转换之后,您必须检查它是否不为空:

if(button != null)
{
    // place here your code
}