使用字符串调用C#中的变量

4

我试图使用循环来编辑多个文本框的数据,但我无法想出如何将一个字符串转换为我的框的名称,以访问每个框的文本元素。

       private void reset_Click(object sender, EventArgs e)
    {
        string cell;
        for(int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                cell = "c" + Convert.ToChar(i) + Convert.ToChar(j);
                cell.text = "";
            }
    }

我的文本框被命名为 "c00, c01, .... c87, c88",这是我的 "cell" 变量在每次迭代中的内容。然而上面的代码无法工作,因为它试图访问字符串的 "text" 元素,这显然是不合理的。
显然,我可以单独清除每个框的内容,但由于我将有多个事件会改变文本框的内容,所以实现一个循环来完成这个任务,而不是为每个事件编写81行代码,这将是理想的。

3
通常情况下,当你有类似于 item_0item_1、……、item_N 这样的变量(或控件)时,你应该停下来问自己,“我能否使用一个数组来替代它们?” - p.s.w.g
也许使用不同的控件,比如列表框,会更加合适。 - Josh Smeaton
3个回答

8
最好使用数组。可以使用这样的二维数组:
TextBox[,] textboxes = ...

private void reset_Click(object sender, EventArgs e)
{
    for(int i = 0; i < textboxes.GetLength(0); i++)
    {
        for (int j = 0; j < textboxes.GetLength(1); j++)
        {
            textboxes[i,j].Text = "";
        }
    }
}

或者是像这样的锯齿数组:

TextBox[][] textboxes = ...

private void reset_Click(object sender, EventArgs e)
{
    for(int i = 0; i < textboxes.Length; i++)
    {
        for (int j = 0; j < textboxes[i].Length; j++)
        {
            textboxes[i][j].Text = "";
        }
    }
}

5
我建议您使用二维文本框数组。这将使您的生活更加轻松。
无论如何,请尝试使用此this.Controls.Find()方法。

1

你应该能够使用linq来操作它。

TextBox txtBox = this.Controls.Select( c => c.Name == cell );
txtBox.Text = "";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接