如何递归查询Winform的所有Childcontrol?

发布于 2024-08-26 07:54:34 字数 281 浏览 4 评论 0原文

我正在使用 Windows 窗体。如何递归查询表单中具有某种类型的所有子控件?

在 SQL 中,您可以使用自连接来执行此操作。

var result = 
  from this 
  join this ????
  where ctrl is TextBox || ctrl is Checkbox
  select ctrl;

我也可以在 LINQ 中执行此操作吗?

编辑:

LINQ 支持联接。为什么我不能使用某种自连接?

Iam using windows forms. How can I query all child controls of a Form recursively which have a certain type?

In SQL you would use a selfjoin to perform this.

var result = 
  from this 
  join this ????
  where ctrl is TextBox || ctrl is Checkbox
  select ctrl;

Can I also do this in LINQ?

EDIT:

LINQ supports joins. Why can't I use some kind of selfjoin?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北音执念 2024-09-02 07:54:34

像这样的东西应该可以工作(无论如何都不是完美的代码......只是为了传达这个想法):

public IEnumerable<Control> GetSelfAndChildrenRecursive(Control parent)
{
    List<Control> controls = new List<Control>();

    foreach(Control child in parent.Controls)
    {
        controls.AddRange(GetSelfAndChildrenRecursive(child));
    }

    controls.Add(parent);

    return controls;
}

var result = GetSelfAndChildrenRecursive(topLevelControl)
    .Where(c => c is TextBox || c is Checkbox);

Something like this should work (not perfect code by any means...just meant to get the idea across):

public IEnumerable<Control> GetSelfAndChildrenRecursive(Control parent)
{
    List<Control> controls = new List<Control>();

    foreach(Control child in parent.Controls)
    {
        controls.AddRange(GetSelfAndChildrenRecursive(child));
    }

    controls.Add(parent);

    return controls;
}

var result = GetSelfAndChildrenRecursive(topLevelControl)
    .Where(c => c is TextBox || c is Checkbox);
苏别ゝ 2024-09-02 07:54:34

也许这会对您有所帮助...

如何从表单中获取所有控件,包括任何容器中的控件?

一旦你有了列表,你就可以查询它们

may be this will help you...

How can I get all controls from a Form Including controls in any container?

once you have the list you can query'em

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文