如何使用标签更改带有该标签的多个项目的属性?
How to Use a Tag to Change the Properties of Multiple Items With That Tag?
我有多个 6 个按钮,当你点击每个按钮时,它们会改变它们的属性,并停用同一标签的其他属性。
我目前拥有的代码不使用标签,而且对于每次单击按钮都执行此操作非常冗长:
private void buttonBritishGas_Click(object sender, EventArgs e)
{
buttonBritishGas.FlatStyle = FlatStyle.Flat;
buttonBritishGas.FlatAppearance.BorderSize = 3;
buttonBritishGas.FlatAppearance.BorderColor = Color.Blue;
buttonEDF.FlatStyle = FlatStyle.Standard;
buttonEDF.FlatAppearance.BorderSize = 1;
buttonEDF.FlatAppearance.BorderColor = Color.White;
buttonEON.FlatStyle = FlatStyle.Standard;
buttonEON.FlatAppearance.BorderSize = 1;
buttonEON.FlatAppearance.BorderColor = Color.White;
buttonNPower.FlatStyle = FlatStyle.Standard;
buttonNPower.FlatAppearance.BorderSize = 1;
buttonNPower.FlatAppearance.BorderColor = Color.White;
buttonScottishPower.FlatStyle = FlatStyle.Standard;
buttonScottishPower.FlatAppearance.BorderSize = 1;
buttonScottishPower.FlatAppearance.BorderColor = Color.White;
buttonSSE.FlatStyle = FlatStyle.Standard;
buttonSSE.FlatAppearance.BorderSize = 1;
buttonSSE.FlatAppearance.BorderColor = Color.White;
我使用的标签是"Supplier",这是我目前尝试的代码:
private void buttonBritishGas_Click(object sender, EventArgs e)
{
buttonBritishGas.Tag = "SelectedSupplier";
foreach (Control c in Controls)
{
if (c.Tag.Equals("SelectedSupplier"))
{
FlatStyle = FlatStyle.Flat;
FlatAppearance etc...;
}
}
foreach (Control c in Controls)
{
if (c.Tag.Equals("Supplier"))
{
FlatStyle = FlatStyle.Standard;
FlatAppearance etc...;
}
}
感谢任何帮助!
已编辑:
private void ChangeStyleByTag(Control parent, string tag, object sender, EventArgs e)
{
foreach (Control c in parent.Controls)
{
if (c.Tag != null && c.Tag.Equals(tag))
{
Button b = (Button)sender;
b.FlatStyle = FlatStyle.Flat;
b.FlatAppearance.BorderSize = 3;
b.FlatAppearance.BorderColor = Color.Blue;
}
else
ChangeStyleByTag(c, tag);
}
}
private void buttonBritishGas_Click(object sender, EventArgs e)
{
buttonBritishGas.Tag = "SelectedSupplier";
ChangeStyleByTag(this."SelectedSupplier");
ChangeStyleByTag(this."Supplier");
}
您必须在表单的控制树中递归循环:
private void ChangeStyleByTag(Control parent, string tag)
{
foreach (Control c in parent.Controls)
{
if (c.Tag!=null && c.Tag.Equals(tag))
{
(c as Button).FlatStyle = FlatStyle.Flat;
(c as Button).FlatAppearance.BorderSize = 3;
(c as Button).FlatAppearance.BorderColor = Color.Blue;
}
else
ChangeStyleByTag(c, tag);
}
}
private void buttonBritishGas_Click(object sender, EventArgs e)
{
ChangeStyleByTag(this, "SelectedSupplier");
ChangeStyleByTag(this, "Supplier");
}
我有多个 6 个按钮,当你点击每个按钮时,它们会改变它们的属性,并停用同一标签的其他属性。
我目前拥有的代码不使用标签,而且对于每次单击按钮都执行此操作非常冗长:
private void buttonBritishGas_Click(object sender, EventArgs e)
{
buttonBritishGas.FlatStyle = FlatStyle.Flat;
buttonBritishGas.FlatAppearance.BorderSize = 3;
buttonBritishGas.FlatAppearance.BorderColor = Color.Blue;
buttonEDF.FlatStyle = FlatStyle.Standard;
buttonEDF.FlatAppearance.BorderSize = 1;
buttonEDF.FlatAppearance.BorderColor = Color.White;
buttonEON.FlatStyle = FlatStyle.Standard;
buttonEON.FlatAppearance.BorderSize = 1;
buttonEON.FlatAppearance.BorderColor = Color.White;
buttonNPower.FlatStyle = FlatStyle.Standard;
buttonNPower.FlatAppearance.BorderSize = 1;
buttonNPower.FlatAppearance.BorderColor = Color.White;
buttonScottishPower.FlatStyle = FlatStyle.Standard;
buttonScottishPower.FlatAppearance.BorderSize = 1;
buttonScottishPower.FlatAppearance.BorderColor = Color.White;
buttonSSE.FlatStyle = FlatStyle.Standard;
buttonSSE.FlatAppearance.BorderSize = 1;
buttonSSE.FlatAppearance.BorderColor = Color.White;
我使用的标签是"Supplier",这是我目前尝试的代码:
private void buttonBritishGas_Click(object sender, EventArgs e)
{
buttonBritishGas.Tag = "SelectedSupplier";
foreach (Control c in Controls)
{
if (c.Tag.Equals("SelectedSupplier"))
{
FlatStyle = FlatStyle.Flat;
FlatAppearance etc...;
}
}
foreach (Control c in Controls)
{
if (c.Tag.Equals("Supplier"))
{
FlatStyle = FlatStyle.Standard;
FlatAppearance etc...;
}
}
感谢任何帮助!
已编辑:
private void ChangeStyleByTag(Control parent, string tag, object sender, EventArgs e)
{
foreach (Control c in parent.Controls)
{
if (c.Tag != null && c.Tag.Equals(tag))
{
Button b = (Button)sender;
b.FlatStyle = FlatStyle.Flat;
b.FlatAppearance.BorderSize = 3;
b.FlatAppearance.BorderColor = Color.Blue;
}
else
ChangeStyleByTag(c, tag);
}
}
private void buttonBritishGas_Click(object sender, EventArgs e)
{
buttonBritishGas.Tag = "SelectedSupplier";
ChangeStyleByTag(this."SelectedSupplier");
ChangeStyleByTag(this."Supplier");
}
您必须在表单的控制树中递归循环:
private void ChangeStyleByTag(Control parent, string tag)
{
foreach (Control c in parent.Controls)
{
if (c.Tag!=null && c.Tag.Equals(tag))
{
(c as Button).FlatStyle = FlatStyle.Flat;
(c as Button).FlatAppearance.BorderSize = 3;
(c as Button).FlatAppearance.BorderColor = Color.Blue;
}
else
ChangeStyleByTag(c, tag);
}
}
private void buttonBritishGas_Click(object sender, EventArgs e)
{
ChangeStyleByTag(this, "SelectedSupplier");
ChangeStyleByTag(this, "Supplier");
}