如何在Windows窗体应用程序中迭代控件?

Byr*_*ock 1 .net c# winforms

所以这是一个愚蠢的问题.我已经在我编写的应用程序中的选项对话框中添加了一堆文本框.它们被命名为textbox1 - textbox12.有没有办法以编程方式访问名称?我只想在for循环中迭代它们.现在我正在单独访问每个人(不寒而栗!).我知道这是错误的方式.什么是正确的方法?什么是简单的方法?

谢谢

Joh*_*udy 8

foreach (Control c in this.Controls)
{
    if (c is TextBox)
    {
        // your logic here
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它们具有不同的功能,那么您可能需要更多检查,而不仅仅是确定它们是正确的类型.当然,这假设您已导入System.Windows.Forms命名空间.


Lee*_*Lee 7

Controls集合允许您按名称访问项目,因此您可以这样做:

var textboxes = Enumerable.Range(1, 12).Select(i => String.Format("textbox{0}", i)).Select(name => (TextBox)this.Controls[name]);
Run Code Online (Sandbox Code Playgroud)

这将避免必须枚举集合中的每个控件,虽然它很脆弱,因为它取决于使用的命名约定.

或者,您可以使用OfType查询方法:

var textboxes = this.Controls.OfType<TextBox>();
Run Code Online (Sandbox Code Playgroud)