C# - 使用太多按钮作为1个变量

时间:2014-12-23 06:26:33

标签: c#

我有一个相当简单的问题。我想改变15个按钮的背景颜色, 但是编写非常麻烦

button1.backgroundColor = Color.black
button2.backgroundColor = Color.black
.
.
.

我如何一次为所有这些按钮指定颜色?

像:

something allButtons = { button1.backgroundColor, button2.backgroundcolor .... }

我知道如何在obj-c中执行此操作:

for (int i = 1; i < 16; i++)
{
    UIButton *button = (UIButton *)[tag:i];
    button.backgroundColor = [UIColor Color.black];
}

但如何在C#中实现这一目标?

2 个答案:

答案 0 :(得分:4)

您可以遍历表单上的所有控件,查找按钮。

    foreach (Control c in this.Controls)
    {
        if (c.GetType() == typeof(Button))
        {
            c.BackColor = Color.Black;
        }
    }

答案 1 :(得分:1)

您将按钮放在按钮阵列中

Button[] buttons = new Button[] {button1, button2, .....};

List<Button>

List<Button> buttons = new List<Button>() { button1, button2, ....);

接下来,以相同的方式遍历按钮数组或List

foreach(Button btn in buttons)
    btn.BackColor = Color.Black;

更改此属性的另一种方法是使用Forms.Controls容器进行循环。但只有当按钮全部包含在Form.Controls集合中时,这才有效。

foreach (Control btn in this.Controls.OfType<Button>())
{
    btn.BackColor = Color.Black;
}

要解决内部ControlCollection中包含的按钮问题,您应该使用一个递归函数,该函数在每个控件容器上循环并最终到达该容器内的按钮

public void SetBackground(Control.ControlCollection coll)
{
    foreach(Control ctr in coll)
    {
       if(ctr.Controls.Count > 0)
          SetBackground(ctr.Controls);
       else
       {
          Button btn = ctr as Button;
          if(btn != null) btn.BackColor = Color.Black;
       }
    }
}

并从顶级集合中调用它

SetBackground(this.Controls);

它要复杂得多,所以我更喜欢使用数组来明确声明需要更改的按钮。