2016-04-30 8 views
1

Verwenden von Schaltflächen zum Ändern der Ansicht von Formular-Projekten. Wie Sie sehen, wird es in jeder Schaltfläche eine Menge Text geben.Switch Ansicht im Formular - mit Panel C#

private void start_Click(object sender, EventArgs e) 

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

Also machte eine Methode davon. Fühlt sich immer noch sehr ungeschickt an. Gibt es eine bessere Möglichkeit, die Ansicht jedes Panels zu wechseln?

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; 
     } 

Ich möchte Tabcontrol nicht verwenden. Nicht sicher, ob der Rückgabewert der Schaltfläche auch besser ist, anstatt void.

Antwort

3

Sie können viele Art und Weise verwenden, um dies zum Beispiel zu tun:

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

oder Verwendung Linq wie zum Beispiel:

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

Hinweis: Satz 1 und 2 arbeiten, wenn Sie Ihre Panels genannt als die Frage (panel1, panel2, Panel3, panel4 ..)

oder einfach, wenn Sie von Panels nicht alot

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

Sehr schön! Vielen Dank Kumpel. – Global

1

Es gibt viele Möglichkeiten, dies zu tun. Direkt neben meinem Kopf könnten Sie die Klasse Panel hinzufügen und eine Eigenschaft hinzufügen und dann eine for-Schleife verwenden, um die Sichtbarkeit basierend auf dieser Eigenschaft festzulegen. Unter eingestuft Panel:

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; } 

    } 
} 

und dann an die Methode Platten wechseln:

 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; 
      } 
     } 

Sie dann Ihre vorhandenen Platten mit benutzerdefinierten Platten ersetzt werden sollten (oder was auch immer Sie sie nennen), und dann in der Designer, auf jedem Panel seinen Panel-Typ einstellen.