2013-10-19 50 views
0

我想用winforms制作一个多页面的应用程序。我决定使用多个面板 - 每个面板代表不同的页面,所以当我需要显示不同的内容时,我可以在它们之间切换。 运行时我的问题是当我尝试切换面板之间的不工作。如何在运行期间将一个面板更改为另一个面板?

我的代码:

private void Form2_Load(object sender, EventArgs e) 
{ 
    panel2.Visible = false; 
} 

private void label4_Click(object sender, EventArgs e) 
{ 
    panel1.Visible = true; 
} 

private void label5_Click(object sender, EventArgs e) 
{ 
    panel2.Visible = true; 
    panel1.Visible = false; 
} 
+3

什么不行? –

+3

什么不起作用,你能说得更好一点吗? –

+0

我想你只是缺少** panel2.Visible = false; **在** label4_Click **事件处理程序中。 –

回答

1
private void Form2_Load(object sender, EventArgs e) 
{ 
    panel2.Visible = false; 
} 

private void label4_Click(object sender, EventArgs e) 
{ 
    panel1.Visible = true; 
    panel2.Visible = false; 
} 

private void label5_Click(object sender, EventArgs e) 
{ 
    panel2.Visible = true; 
    panel1.Visible = false; 
} 
+0

我试过了,但没有工作.. – Amoolya

0

这取决于你如何布置你的面板。我怀疑你甚至没有将你的面板添加到你的表格中,或者你将面板放置在错误的地方。我想你想填写​​在你的Form,我们可以使用BringToFont()方法来显示你的面板。试试这个:

private void Form2_Load(object sender, EventArgs e){ 
    panel1.Dock = panel2.Dock = DockStyle.Fill; 
    panel1.Parent = panel2.Parent = this;//this refers to Form2 
} 

private void label4_Click(object sender, EventArgs e) { 
    panel1.BringToFront();//show panel1 
} 

private void label5_Click(object sender, EventArgs e){ 
    panel2.BringToFront();//show panel2 
} 

注意:看到它在行动你应该确保你的label4_Clicklabel5_ClickForm2_Load是否正确注册。你也应该设置BackColor of PANEL1 and panel2`不同的,就像这样:

//your Form2 constructor 
public Form2(){ 
    label4.Click += label4_Click; 
    label5.Click += label5_Click; 
    Load += Form2_Load; 
    panel1.BackColor = Color.Green; 
    panel2.BackColor = Color.Red; 
} 

因为你填写你的面板到您的所有形式的客户端长方形,label4应加panel2label5应该加入panel1

0

除了需要重新定位一个面板

panel1.Location = new Point(0, 0); //the preferd new postion 
panel2.Location =new Point(1000,1000)//far away 
panel2.Visible=false; 
panel1.Visible=true; 
0

这正是因为要放置在另一个面板的顶部一个面板和这些面板变得越来越重叠。 因此,当您执行程序时,您至少无法看到一个面板。程序中没有错误,但要避免此问题,请按照以下步骤操作。

1.在载入表格时,请确保所有面板都是最初隐藏的。

2.在将任何面板可见性更改为true时,确保剩余所有面板可见性设置为false(隐藏)。

3.try删除相互重叠的面板。

谢谢。

0

对此的另一个解决方案是使用TabControl而不使用标题,这在IDE中更容易管理,因为您看到选项卡,并且可以在设计时间期间在它们之间切换,并且它们在运行时隐藏。

看到这个: How do I create a TabControl with no tab headers?

伟大的巫师等等:-)

再加上一点改变当前活动标签按钮。

​​
0

如果panel2位于panel1的内部,panel1将成为panel2的父代(而不是您的表格)。如果是这种情况,那么如果隐藏父项(panel1),则将panel2设置为可见将不起作用。您可以尝试将面板并排放置,并查看点击按钮是否有效。

的解决方法,这个问题是设置财产代码:

private void Form1_Load(object sender, EventArgs e) 
    { 
     panel1.Parent = this; 
     panel2.Parent = this;   
    } 
0

我是这样的:因为我命名的面板,他们的名字与“PNL”开始。由于没有与对象的名称的正当性,我们可以搜索这样

private void panelVibility(Control ctr) 
{ 
    foreach (Control item in this.Controls) 
    { 
     if (item.Name.StartsWith("pnl")) 
     { 
      item.Location = new Point(12, 27); 
      item.Visible = false; 
     } 
    } 
    ctr.Visible = true; 
} 

他们发送你想作为一个参数,当你通过button_Click调用该方法,例如把可见的面板。

private void btnPnl1_Click(object sender, EventArgs e) 
{ 
    panelVibility(pnl1); 
} 
相关问题