【问题标题】:How to Use a Tag to Change the Properties of Multiple Items With That Tag?如何使用标签更改具有该标签的多个项目的属性?
【发布时间】:2015-04-25 19:43:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    你必须在窗体的控制树内递归循环:

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

    【讨论】:

    • 您好,感谢您的帮助!当我尝试实现您的方法以添加按钮等的平面样式更改时...,我不得不向方法控件添加更多内容,现在我收到一条错误消息,提示“方法'ChangeStyleByTag'没有重载需要2个参数” ,你知道如何解决这个问题吗,看看我上面编辑的代码?
    • ChangeStyleByTag(this, "SelectedSupplier"); ChangeStyleByTag(this, "供应商");看到逗号“,”而不是点“。”
    • 你的方法在找到标签的时候确实有帮助,但是我一直没能实现用标​​签改变按钮特性的方法
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多