c# - 如何获取列表中的所有 Windows 窗体元素

标签 c# winforms visual-studio-2010

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

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

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

最佳答案

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

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;
    }
}

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

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

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

关于c# - 如何获取列表中的所有 Windows 窗体元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18643649/

相关文章:

c# - WinForms 调用/BeginInvoke

c# - 获取winforms文本框的光标位置

c# - 在 Visual Studio 2010 中调试 x64 Web 应用程序

c# - 获取非继承属性

c# - 如何确定剪贴板内容的编码

c# - 使用 TimeSpan 选择器的 Observable.Generate 似乎会泄漏内存 [当使用 TimeSpan > 15ms 时]

c# - 如何在现有的 AspNetUsers 表中添加一列

c# - 控件移动后 Windows 窗体 MouseEnter 不触发

wcf - 尝试自行托管时,出现错误 - wcf 服务主机找不到任何服务元数据..请检查是否启用了元数据

visual-studio-2010 - 为什么这个 Visual Studio 构建后事件没有触发?