2016-04-30 35 views
1

使用按鈕來更改窗體項目的視圖。如您所見,每個按鈕中都會有很多文字。切換在窗體中查看 - 使用面板c#

private void start_Click(object sender, EventArgs e) 

    { 
     panel1.Visible = true; 
     panel2.Visible = false; 
     panel3.Visible = false; 
     panel4.Visible = false; 
    } 

就這樣做了一個方法。仍然感覺非常笨拙..有沒有更好的方法來切換每個面板的視圖?

private void start_Click(object sender, EventArgs e) 
    { 
     panel = 1; 
     PanelW(1); 
    } 

    public void PanelW(int panel) 
    { 
     if (panel == 1) 
     { 
      panel1.Visible = true; 
      panel2.Visible = false; 
      panel3.Visible = false; 
      panel4.Visible = false; 
     } 
     else if (panel == 2) 
     { 
      panel2.Visible = true; 
      panel1.Visible = false; 
      panel3.Visible = false; 
      panel4.Visible = false; 
     } 
     else if (panel == 3) 
     { 
      panel3.Visible = true; 
      panel1.Visible = false; 
      panel2.Visible = false; 
      panel4.Visible = false; 
     } 
     else if (panel == 4) 
     { 
      panel4.Visible = true; 
      panel1.Visible = false; 
      panel2.Visible = false; 
      panel3.Visible = false; 
     } 

我不想使用tabcontrol。不知道如果更好地使用返回值按鈕,而不是無效。

回答

3

您可以使用許多方法來例如這樣做:

public void PanelW(int panel) 
{ 
    foreach (var pb in this.Controls.OfType<Panel>()) 
     pb.Visible = pb.Name == "panel" + panel; 
} 

或使用LINQ像爲:

public void PanelW(int panel) 
{ 
    Controls.OfType<Panel>().Count(p => (p.Visible = p.Name == "panel" + panel)); 
} 

注:命題1和2的工作,如果你命名你的面板作爲問題(panel1,panel2,panel3,panel4 ..)

或者乾脆如果你沒有很多面板

public void PanelW(int panel) 
{ 
    panel1.Visible = panel == 1; 
    panel2.Visible = panel == 2; 
    panel3.Visible = panel == 3; 
    panel4.Visible = panel == 4; 
} 
+0

非常好!非常感謝。 – Global

1

有很多方法可以做到這一點。就在我頭頂,你可以分類面板並添加一個屬性,然後使用for循環來設置基於該屬性的可見性。子類面板:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 

    public enum PanelType 
    { 
     HomeScreen, Settings 
    } 
    public partial class CustomPanel : Panel 
    { 

     public PanelType PanelType { get; set; } 

    } 
} 

,然後方法切換面板:

 private void button1_Click(object sender, EventArgs e) 
     { 
      SwitchPanel(PanelType.HomeScreen); 
     } 

     private void SwitchPanel(PanelType displayType) 
     { 
      foreach (var ctl in this.Controls) 
      { 
       if (ctl.GetType() == typeof(CustomPanel)) 
        ((CustomPanel)ctl).Visible = ((CustomPanel)ctl).PanelType == displayType; 
      } 
     } 

然後,您需要使用自定義面板,以取代現有的面板(或者無論你怎麼稱呼他們),然後在設計師,在每個面板上設置它的面板類型。