如何使用标记更改具有该标记的多个项目的属性?

时间:2015-04-25 19:43:39

标签: c# visual-studio-2010 visual-studio visual-studio-2012 tags

我有多个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;

我使用的标签是“供应商”,这是我目前尝试的代码:

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");
    }

1 个答案:

答案 0 :(得分:0)

你必须在表单的控制树中递归循环:

    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");
    }