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

3

我有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;
    }

创建一个 bool 方法或者普通方法。然后在每个按钮上调用该方法,以某种方式缩短代码。 - P. Pat
在循环控件时,这个链接可能会有所帮助:https://dev59.com/qGsz5IYBdhLWcg3w9ssQ - tretom
如果控件在逻辑上相关,则应该有一些数据结构(例如List<Button>)来反映这一点。 - Lei Yang
1个回答

2

将所有按钮和标签放在一个容器中(如果这意味着只有这些按钮和标签,则可以使用this.Controls作为容器)。让它成为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);。简而言之,你可以将希望启用的按钮和标签传递给此方法,该方法将禁用容器中其余的控件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接