【问题标题】:Add all buttons from my form to a list将我表单中的所有按钮添加到列表中
【发布时间】:2015-08-03 00:41:20
【问题描述】:

我的 Windows 窗体中有 86 个按钮。我在我的代码中制作了一个按钮列表。现在我想将所有按钮添加到列表中。有没有办法一次性将所有按钮添加到列表中,还是我需要逐个按钮添加所有按钮?

这是我的清单:List<Button> lColors = new List<Button>();

【问题讨论】:

  • 现在问为什么单个表单上的 86 个按钮有任何意义 是否为时已晚?
  • @DonBoitnott,问这样的问题永远不会太晚。不过,OP 是否会倾听并合理化他的 UI 是一个完全不同的问题。
  • 我需要控制一个有 86 个不同模块的 LED 面板,每个模块都需要有自己的颜色,因此我使用了 86 个按钮(+ 保存按钮等)

标签: c# winforms list button add


【解决方案1】:

如果所有按钮都在表单上(例如不在 Panel 中)

List<Button> lColors = this.Controls.OfType<Button>().ToList();

如果一些按钮在表单上,​​而一些在面板中

List<Button> lColors = this.Controls.OfType<Button>()
               .Concat(this.panel1.Controls.OfType<Button>())
               .ToList();

【讨论】:

  • ...如果是,那么您将需要一个递归函数。
  • @DonBoitnott,在某些情况下,是的。但是,如果一个函数递归地扫描所有子控件的控件集合,则可能会出现从自定义用户控件中发现意外按钮的情况
【解决方案2】:

您可以使用以下递归方法来获取指定控件的指定类型的所有子控件:

private static IEnumerable<T> GetAllControls<T>(Control control)
{
    var controls = control.Controls.OfType<T>();
    return control.Controls.Cast<Control>()
        .Aggregate(controls, (current, c) => current.Concat(GetAllControls<T>(c)));
}

用法:

var buttons = GetAllControls<Button>(this);

【讨论】:

    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多