我有一个相当简单的问题。我想改变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#中实现这一目标?
答案 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);
它要复杂得多,所以我更喜欢使用数组来明确声明需要更改的按钮。