根据某些条件启用和禁用按钮,标签

时间:2017-03-23 06:29:16

标签: c# winforms button label

每个按钮旁边有5个按钮和5个标签。当我运行应用程序时,我希望启用第一个按钮,其余部分禁用并使用标签显示灰色。单击第一个按钮后,它应该使用标签禁用并启用第二个按钮,依此类推所有其他按钮。

这种方式很长,有没有更好的方法呢?

private void Form1_Load(object sender, EventArgs e)
{

        btn1.Enabled = true;
        btn2.Enabled = false;
        btn3.Enabled = false;
        btn4.Enabled = false;
        btn5.Enabled = false;
        lblStep1.Enabled = true;
        lblStep2.Enabled = false;
        lblStep3.Enabled = false;
        lblStep4.Enabled = false;
        lblStep5.Enabled = false;
    }

    private void btn1_Click(object sender, EventArgs e)
    {
            btn1.Enabled = false;
            btn2.Enabled = true;
            btn3.Enabled = false;
            btn4.Enabled = false;
            btn5.Enabled = false;
            lblStep1.Enabled = false;
            lblStep2.Enabled = true;
            lblStep3.Enabled = false;
            lblStep4.Enabled = false;
            lblStep5.Enabled = false;
    }

    private void btn2_Click(object sender, EventArgs e)
    {
            btn1.Enabled = false;
            btn2.Enabled = false;
            btn3.Enabled = true;
            btn4.Enabled = false;
            btn5.Enabled = false;
            lblStep1.Enabled = false;
            lblStep2.Enabled = false;
            lblStep3.Enabled = true;
            lblStep4.Enabled = false;
            lblStep5.Enabled = false;
        }
    }

    private void btn3_Click(object sender, EventArgs e)
    {
        btn1.Enabled = false;
        btn2.Enabled = false;
        btn3.Enabled = false;
        btn4.Enabled = true;
        btn5.Enabled = false;
        lblStep1.Enabled = false;
        lblStep2.Enabled = false;
        lblStep3.Enabled = false;
        lblStep4.Enabled = true;
        lblStep5.Enabled = false;
    }

    private void btn4_Click(object sender, EventArgs e)
    {
        btn1.Enabled = false;
        btn2.Enabled = false;
        btn3.Enabled = false;
        btn4.Enabled = false;
        btn5.Enabled = true;
        lblStep1.Enabled = false;
        lblStep2.Enabled = false;
        lblStep3.Enabled = false;
        lblStep4.Enabled = false;
        lblStep5.Enabled = true;
    }

    private void btn5_Click(object sender, EventArgs e)
    {
        btn1.Enabled = true;
        btn2.Enabled = false;
        btn3.Enabled = false;
        btn4.Enabled = false;
        btn5.Enabled = false;
        lblStep1.Enabled = true;
        lblStep2.Enabled = false;
        lblStep3.Enabled = false;
        lblStep4.Enabled = false;
        lblStep5.Enabled = false;
    }

1 个答案:

答案 0 :(得分:3)

让所有这些按钮和标签都在一个容器内(如果不是意味着你可以使用它。如果表单只包含这些按钮和标签,也可以使用控件)。设为pnlContainer,现在你可以尝试这样的事情:

public void ButtonController(Button buttonToEnable, Label labelToenable)
{
    foreach (Control ctrl in panel1.Controls)
    {
        if (ctrl == buttonToEnable || ctrl == labelToenable)
        {
            ctrl.Enabled = true;
        }
        else
        {
            ctrl.Enabled = false;
        }
    }
}

因此,在Form1_Load您要启用btn1lblStep1,因此呼叫应为:

ButtonController(btn1,lblStep1);

对于btn1_Click,方法调用将类似于ButtonController(btn2,lblStep2);。简而言之,您可以传递要为此方法启用的按钮和标签,这将禁用容器中的其余控件。