【问题标题】:How to change multiple textboxes from an array?如何更改数组中的多个文本框?
【发布时间】:2023-02-24 02:12:40
【问题描述】:

我有一个包含不同练习名称的文本文件。当我按下“恢复”按钮时,我希望每个练习都放入一个文本框中。我最初是这样的:

string[] lines = System.IO.File.ReadAllLines("savedWorkout.txt");

            textBox1_1.Text = lines[0];
            textBox1_2.Text = lines[1];
            textBox1_3.Text = lines[2];
            textBox1_4.Text = lines[3];
            textBox1_5.Text = lines[4];
            textBox1_6.Text = lines[5];
            textBox1_7.Text = lines[6];

这样做有效并更新了文本框。但是我还有更多的文本框,所以我想在一个循环中填充每个文本框,使代码更紧凑。所以我用一个数组试了一下:

string[] exercises = new string[] { textBox1_1.Text, textBox1_2.Text, textBox1_3.Text, textBox1_4.Text, textBox1_5.Text, textBox1_6.Text, textBox1_7.Text}

for (int i = 0; i < 7; i++)
            {
                exercises[i] = lines[i];
            }

这是行不通的。虽然我运行代码时没有错误,但当我按下恢复按钮时它不会更新文本框。我不确定为什么。任何有关如何解决此问题的建议将不胜感激。

【问题讨论】:

    标签: c# arrays loops textbox text-files


    【解决方案1】:

    exercises 字符串数组只存储字符串。它不存储对任何.Text 属性的引用。因此,更改数组中的元素会更改数组,但不能更改 TextBox。你应该做的是:

    TextBox[] boxes = new TextBox[] { textBox1_1, textBox1_2, textBox1_3, textBox1_4, textBox1_5, textBox1_6, textBox1_7};
    
    int i = 0;
    var lines = File.ReadLines("savedWorkout.txt");
    foreach(var line in lines.Take(boxes.Length)) 
    {
        boxes[i++].Text = line;
    }
    

    如果文本框有一个共同的父控件,比如 GroupBox 或 Panel,那就更好了。然后你可以这样做:

    TextBox[] boxes = ParentControl.Controls.OfType<TextBox>().ToArray();
    

    只是当心在你创建boxes数组的地方!那些 TextBox 对象还不存在当您的 Form 类的字段首次初始化时。这是稍后作为 InitializeComponents() 方法的一部分完成的。因此,请确保该数组对于您使用它的方法是本地的,或者是在构造中初始化的对 Initialize Components() 的调用。

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      相关资源
      最近更新 更多