2013-10-19 49 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); 
} 
相關問題