在C#中隐藏/显示Windows窗体面板

Mar*_*iaD 1 c# panel winforms

我尝试在C#中显示/隐藏面板,但是当我点击button1时,我想看到panel1但是出现了panel2.当我按下button2时,panel2消失了.但是当我第一次在按钮2上爬行时,panel2没有出现.我不知道我的代码有什么问题,但它是:

public Form3()
    {
        InitializeComponent();
    }

    bool show1;
    bool show2;
    private void button1_Click(object sender, EventArgs e)
    {
        if(show1)
        {
            panel1.Visible = false;
            show1 = false;
        }
        else
        {
            panel1.Visible = true;
            show1 = true;
        }
        Application.DoEvents();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (!show2)
        {
            panel2.Visible = true;
            show2 = true;
        }
        else
        {
            panel2.Visible = false;
            show2 = false;
        }
        Application.DoEvents();
    }
Run Code Online (Sandbox Code Playgroud)

Ian*_*Ian 6

不要使用标志,因为您的按钮行为将由标志的状态决定.

最好是按照你想要的方式编写代码.如果您希望每个Button面板都可见,而其他面板不可见:

private void button1_Click(object sender, EventArgs e)
{
     panel1.Visible = true;
     panel2.Visible = false;
     //Application.DoEvents();
}

private void button2_Click(object sender, EventArgs e)
{
     panel2.Visible = true;
     panel1.Visible = false;
     //Application.DoEvents();
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望每个按钮独立控制每个面板的可见性,请执行以下操作:

private void button1_Click(object sender, EventArgs e)
{
     panel1.Visible = !panel1.Visible;
     //Application.DoEvents();
}

private void button2_Click(object sender, EventArgs e)
{
     panel2.Visible = !panel2.Visible;
     //Application.DoEvents();
}
Run Code Online (Sandbox Code Playgroud)

最后,Application.DoEvents()可以删除(归功于Thorsten Dittmar),因为控件将在Click方法完成后立即返回UI线程.阅读他的评论和推荐的链接.