【问题标题】:Use loop to clear. textBox[i].Clear(). Is this possible?使用循环清除。文本框[i].Clear()。这可能吗?
【发布时间】:2015-10-09 14:06:59
【问题描述】:

我只是想知道这一点,以尝试清理我的代码,并供将来参考。

我有很多文本框。

        tbPart1.Clear();
        tbPart2.Clear();
        tbPart3.Clear();
        tbPart4.Clear();
        tbPart5.Clear();
        tbPart6.Clear();
        tbPart7.Clear();

有什么方法可以使用循环来替换数字吗?

我试过了,但不知道如何运行字符串。

        for (int i = 1; i == 7; i++)
        {
            string p = "tbPart" + i.ToString() + ".Clear";
        }

【问题讨论】:

  • 您的应用程序中只有这些文本框吗?这是 Forms、WPF、ASP 还是其他?
  • 抱歉,Windows 窗体,C#。我的错。我有大约20个左右要清除。这些只是其中的一部分。
  • for (int i = 1; i
  • 请考虑将其中一个答案标记为已接受。

标签: c# loops variables


【解决方案1】:

在表单代码内部(即在按钮单击事件处理程序中),您可以枚举表单上的所有 TextBox 控件并对它们执行特定操作:

this.Controls.OfType<TextBox>().ToList().ForEach(x => x.Clear());

如果您只需要清除 一些 TextBox 控件,您可以提供一种过滤器,如下所示:

this.Controls.OfType<TextBox>()
    // Add a condition to clear only some of the text boxes - i.e. those named "tbPart..."
    .Where(x=>x.Name.StartsWith("tbPart"))
    .ToList().ForEach(x => x.Clear());

【讨论】:

  • 正是我要建议的。我猜叫迈克尔的人想法都差不多。
  • 这很完美,我基本上需要清除表单上的每个文本框,所以这看起来是最好的方法。非常感谢。我会试一试并得到结果。
  • 上面的代码似乎没有做任何事情,但没有显示错误。我的文本框在一个分组框中,如果这有什么不同吗?
  • 将上面代码示例中的this 更改为您的GroupBox 的名称(或您要清除的TextBox 控件的直接父控件)。
【解决方案2】:

不,你不能那样做。但是您可以定义一个数组或列表来放置控件,然后清除它们。例如:

List<TextBox> textboxes = new List<TextBox>();
textboxes.Add(tbPart1);
textboxes.Add(tbPart2);
textboxes.Add(tbPart3);
...

然后当你想清除它们时

foreach (var tb in textboxes)
    tb.Clear();

【讨论】:

    【解决方案3】:
    TextBox[] boxes = new [] {
        tbPart1,
        tbPart2,
        tbPart3,
        tbPart4,
        tbPart5,
        tbPart6,
        tbPart7
    };
    
    for (int i = 0; i < boxes.Length; i++)
    {
        boxes[i].Clear();
    }
    

    【讨论】:

    • 我更多的是寻找一种方法来清理我的代码并删除所有文本框代码并且只有 1 或 2 行,因为我需要清除大约 20 个其他文本框,它看起来很乱.干杯
    【解决方案4】:

    我认为你应该使用一个文本框数组然后你可以做一个循环取决于文本框的数量。

    【讨论】:

    • 你能补充一些解释吗?或者完全删除这个问题,因为其他答案通过代码示例和解释准确地展示了您的建议。
    【解决方案5】:
    foreach(Control ctrl in this.Controls)
    {
        if(ctrl.GetType() == typeof(TextBox))
        {
            ctrl.Text = String.Empty;
        }
    }
    

    【讨论】:

      【解决方案6】:

      使用面板1内的控件名称回答第一个

      private void button2_Click(object sender, EventArgs e) { 字符串 currentCtrlName;

              for (int i = 0; i < panel1.Controls.Count; i++)
              {
                  currentCtrlName = "textBox" + (i+1).ToString();
                  panel1.Controls[currentCtrlName].Text = "";
              }
      
          }
      

      ================== 通过使用 Control index 作为 panel1 中的子项来回答第一个问题

      private void button2_Click(object sender, EventArgs e) {

              for (int i = 0; i < panel1.Controls.Count; i++)
              {
                  panel1.Controls[i].Text = "";
              }
      
          }
      

      ===================

      【讨论】:

        猜你喜欢
        • 2011-04-14
        • 1970-01-01
        • 2020-10-25
        • 1970-01-01
        • 2023-01-16
        • 2011-07-22
        • 2011-11-10
        • 2019-11-19
        相关资源
        最近更新 更多