C# 在C中隐藏/显示Windows窗体面板#
我试图用C#显示/隐藏面板,但当我点击按钮1时,我想看到面板1,但面板2出现了。 当我按下按钮2时,面板2出现了。 但当我第一次点击按钮2时,面板2并没有出现。 我不知道我的代码有什么问题,但这里是:C# 在C中隐藏/显示Windows窗体面板#,c#,winforms,panel,C#,Winforms,Panel,我试图用C#显示/隐藏面板,但当我点击按钮1时,我想看到面板1,但面板2出现了。 当我按下按钮2时,面板2出现了。 但当我第一次点击按钮2时,面板2并没有出现。 我不知道我的代码有什么问题,但这里是: public Form3() { InitializeComponent(); } bool show1; bool show2; private void button1_Click(object sender, EventArgs e)
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();
}
不要使用标志,因为按钮行为将由标志的状态决定
最好是按照你想要的方式编码。如果希望每个按钮
使相应的面板可见,而其他面板不可见:
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();
}
或者,如果希望每个按钮独立控制每个面板的可见性,请执行以下操作:
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();
}
最后,可以删除Application.DoEvents()
,因为在单击方法完成后,控件将立即返回UI线程。阅读他和引用的内容。不要使用标志,因为按钮的行为将由标志的状态决定
最好是按照你想要的方式编码。如果希望每个按钮
使相应的面板可见,而其他面板不可见:
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();
}
或者,如果希望每个按钮独立控制每个面板的可见性,请执行以下操作:
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();
}
最后,可以删除Application.DoEvents()
,因为在单击方法完成后,控件将立即返回UI线程。阅读his和引用的。不要使用全局变量,如show1
和show2
你可以这样做
private void button1_Click(object sender, EventArgs e)
{
panel1.Visible = !panel1.Visible;
Application.DoEvents();
}
不要使用全局变量,如show1
和show2
你可以这样做
private void button1_Click(object sender, EventArgs e)
{
panel1.Visible = !panel1.Visible;
Application.DoEvents();
}
不需要使用变量和条件。
只需添加panel1.Visible=false;或面板1。可见=真实代码>在按钮上单击无需使用变量和条件。
只需添加panel1.Visible=false;或面板1。可见=真实
点击按钮您可能会找到解决方案,但我只想建议您在更改控制状态时使用SuspendLayout()
和resumellayout()
,以提高性能
private void button1_Click(object sender, EventArgs e)
{
this.SuspendLayout();
panel1.Visible = true;
panel2.Visible = false;
this.ResumeLayout();
//Application.DoEvents();
}
private void button2_Click(object sender, EventArgs e)
{
this.SuspendLayout();
panel2.Visible = true;
panel1.Visible = false;
this.ResumeLayout();
//Application.DoEvents();
}
您可能会找到解决方案,但我只想建议您在更改控件状态时使用SuspendLayout()
和resumeloayout()
,以提高性能
private void button1_Click(object sender, EventArgs e)
{
this.SuspendLayout();
panel1.Visible = true;
panel2.Visible = false;
this.ResumeLayout();
//Application.DoEvents();
}
private void button2_Click(object sender, EventArgs e)
{
this.SuspendLayout();
panel2.Visible = true;
panel1.Visible = false;
this.ResumeLayout();
//Application.DoEvents();
}
不幸的是,您的代码不完整,无法使用您现有的代码重现问题。也许你已经把你的事件向后连接了?panel2.Visible=!panel2.Visible和panel1.Visible=!panel1.visible您可以删除应用程序.DoEvents
。第一:不鼓励使用它(请参阅),第二:控件在Click
方法退出后立即返回到UI线程,因此将立即进行更新。不幸的是,您的代码不完整,无法使用您现有的内容重现问题。也许你已经把你的事件向后连接了?panel2.Visible=!panel2.Visible和panel1.Visible=!panel1.visible您可以删除应用程序.DoEvents
。第一:不鼓励使用它(请参阅),第二:控件在方法退出后立即返回UI线程,因此更新将立即完成。这里不需要使用Application.DoEvents()
,因为该方法将退出。虽然Application.DoEvents()
的使用被认为是有问题的,但这里没有必要使用它。@ThorstenDittmar:我不确定op
为什么要调用Application.DoEvents()
,但我还是把它放在那里,以防他需要它。啊,我在最初的问题中没有读到这一点。我也将在那里发表评论。我尝试这样做,但面板没有出现。这里不需要使用Application.DoEvents()
,因为该方法无论如何都将退出。虽然Application.DoEvents()
的使用被认为是有问题的,但这里没有必要使用它。@ThorstenDittmar:我不确定op
为什么要调用Application.DoEvents()
,但我还是把它放在那里,以防他需要它。啊,我在最初的问题中没有读到这一点。我也将在那里发表评论。我尝试这样做,但面板没有出现。我尝试了,但不起作用。我尝试了,但不起作用。我尝试使用此代码,但当我启动程序时,出现了面板2(我尝试使面板显示为空白)。当我单击按钮1时,出现了panel1,但当我单击按钮2时,panel2没有出现。@MariaD考虑到命令非常清楚,设置panel2.Visible=true,这很奇怪。首先,您可以调试当您单击按钮时是否真的执行了该行。接下来,是确认您的面板名称是否正确。除此之外,您可能需要使用VS debugger逐行检查。我回顾了我的表单设计,在那里看到另一个空白面板,名称是panel2,在本例中,当我单击按钮2时,panel2没有出现,但现在正在工作,感谢您的帮助。我尝试使用此代码,但在启动程序时出现了panel2(我试着做一个空白的面板)。当我单击按钮1时,出现了panel1,但当我单击按钮2时,panel2没有出现。@MariaD考虑到命令非常清楚,设置panel2.Visible=true,这很奇怪。首先,当你单击按钮时,你可以调试行是否真的执行了。接下来,是确认你的面板名称正确。除此之外,你可以我需要使用VS debugger逐行检查。我回顾了我的表单设计,看到了另一个空白面板,名称是panel2,在本例中,当我单击按钮2时,我的panel2没有出现,但现在正在工作,感谢您的帮助。