如何在列表中获取所有Windows窗体元素

时间:2013-09-05 18:42:02

标签: c# winforms visual-studio-2010

我有一个Windows窗体应用程序。

Windows窗体由几个元素组成。我可以用他们的名字联系到他们每个人。 (例如:textbox1.Text)

我可以在集合中获取所有表单元素吗?

3 个答案:

答案 0 :(得分:3)

您可以使用以下方法遍历树并获取任何控件下方的所有子控件(在所有深度处)。

public static IEnumerable<Control> GetAllControls(Control root)
{
    var stack = new Stack<Control>();
    stack.Push(root);

    while (stack.Any())
    {
        var next = stack.Pop();
        foreach (Control child in next.Controls)
            stack.Push(child);

        yield return next;
    }
}

然后,您可以将表单作为根传递,以便在单个序列中获取该表单中的所有控件。如果您希望全部使用ToList,请使用List

如果您只想过滤掉特定类型的控件,请使用OfType

var textboxes = GetAllControls(someForm).OfTYpe<Textbox>();

答案 1 :(得分:0)

试试这个。在代码隐藏文件中进行控制,并给出一个所有控件的列表。

答案 2 :(得分:0)

使用this.Controls(或更正式地:Control.Controls

要获取所有TextBox控件,请使用:

this.Controls.OfType<Control>().Where(x => x is TextBox);

这只会获得顶级项目。如果你需要更深入(提示开始),你需要做一些递归。