【问题标题】:iterate text boxes by a for loop通过 for 循环迭代文本框
【发布时间】:2011-11-02 21:34:43
【问题描述】:

假设我有 10 个文本框,我想在每个文本框中输入相同的文本。我不想写十遍textBoxNum. Text = "hello!",所以我可能会写这样的东西:

for(int i=1; i<=10; i++)
{
    textBox + i. Text = "hello!";
}

显然,它不起作用。

如何使用for 循环来完成此操作?

【问题讨论】:

  • 你应该为你的文本框命名。

标签: c# winforms textbox for-loop


【解决方案1】:

你应该把你的文本框放到一个数组中:

TextBox[] boxes;

public MyForm() {
    InitializeComponent();
    boxes = { someTextBox, otherTextBox, ... };
}

【讨论】:

    【解决方案2】:

    像这样:

    foreach (Control c  in this.Controls)
    {
         if (c is TextBox)
         {
             ((TextBox)c).Text = "Hello";
         }
    }
    

    假设您要设置控件\表单中包含的所有文本框的文本,但可以针对更具体的场景进行修改

    【讨论】:

      【解决方案3】:

      您需要将所有文本框加载到列表或数组结构中,这将允许您对其进行迭代。

      TextBox[] boxes = { tb1, tb2, tb3, ... };
      

      否则,您可以检查表单/容器的 Controls 属性以查找 TextBox 类型的项目。如果控件可以嵌套在更深的容器中,您可能需要递归地探索它们(在这一点上,我会认真考虑使用数组方法,除非您要加载数量惊人的文本框)。但作为一个起点,你可能有

      foreach (var tb in this.Controls.OfType<TextBox>())
      {
          tb.Text = "whatever";
      }
      

      【讨论】:

        【解决方案4】:

        您还可以编辑仅匹配您想要的内容的控件。这是一个例子。

        foreach(Control ctrl in Controls)
          {
            if (ctrl.Name.StartsWith("TextBoxToEdit"))
            {
              ctrl.Text = "Hello!";
            }
          }
        

        此外,由于 Control 已经具有 Text 属性,因此无需将控件转换为 TextBox。

        【讨论】:

        • 它可能具有Text 属性,但您仍要验证if (ctrl is TextBox) {}。任何东西的名称都可以以“TextBoxToEdit”开头。
        猜你喜欢
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 2016-01-14
        • 2013-03-23
        • 2016-01-19
        • 1970-01-01
        相关资源
        最近更新 更多