【问题标题】:How to loop through TextBox controls? (C# WinForms)如何循环通过 TextBox 控件? (C# WinForms)
【发布时间】:2016-02-07 07:25:55
【问题描述】:

我有 49 个文本框,它们位于表格格式的表单上。每行文本框属于不同的类别。我想知道如何在数组中循环遍历它们?

我的意思是:

txtName(0).Text
txtOtherName(0).Text
txtName(1).Text
txtOtherName(1).Text

((等等...)) 其中 (#) 是文本框名称的唯一后缀。

如果可能,我会尽量避免将所有单独的变量(在每个组中)分配给它们。所以我总共会有 7 个变量和 49 个文本框。

感谢任何帮助。

谢谢

【问题讨论】:

  • 你的问题中没有#
  • @VahidK。 (#) 表示文本框名称中括号内的数字。括号和数字只是一个占位符,用于大致了解我在我的问题中的意思。
  • 我有 49 个文本框位于表格格式的表单上。 似乎是糟糕的设计,会产生这样的问题。如果可能,请考虑使用DataGridView 控件
  • @Fabio 这是一个学校项目。文本框是必要的(遗憾的是)。我正在使用DataGridView 将信息显示给用户。但是,是的,尽管设计看起来很糟糕,但需要文本框。我试图让它看起来尽可能体面,它实际上看起来并不太糟糕。哈哈

标签: c# winforms textbox controls


【解决方案1】:

你可以这样遍历每个控件

foreach (var control in this.Controls)
{
    var textBox = control as TextBox;
    if (textBox != null)
    {
          // do your stuff here
    }
}

【讨论】:

  • 正确的想法,但有两个问题。首先,数组应该是 Controls() 之一,而不是 TextBoxes。您还不知道它们都是 TextBox,稍后在使用 As 运算符循环时检查一下。其次,该问题被标记为 [c#],因此以该语言发布示例代码可能更合适。 (并不是说 VB.NET 不能轻松翻译成 C#,但这个人可能是初学者,可能还不能做到。)
  • 同意@CodyGray,我的错。我批准了使用 C# 进行的编辑。
  • if (control is TextBox) 之前假设它是一个
  • @Hemal 所以,this.Controls 指的是表单上的所有文本框?
  • Controls 表示所有控件,包括文本框。然后将单个控件转换为文本框。如果它成功转换为文本框,那么它不会为空,然后你可以继续。
【解决方案2】:

这可能会有所帮助:root 是容器或窗口,id 是控件:

#region Find Control Recursive
public Control FindControlRecursive(Control root, string id)
{
    if (root.ID == id)
       return root;
    foreach (Control c in root.Controls)
    {
        Control t = FindControlRecursive(c, id);
        if (t != null)
           return t;
    }
    return null;
}
#endregion

【讨论】:

  • 你为什么要那样做?!您的简单 foreach 循环完成了所有工作。那么为什么递归调用的所有开销呢?!
猜你喜欢
  • 2020-10-23
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2012-08-05
  • 2011-04-19
  • 2014-10-25
相关资源
最近更新 更多