2016-04-30 15 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の作業あなたのようにあなたのパネルという名前を付けた場合質問(パネル1、パネル2、パネル3、パネル4 ..)

または単にあなたがパネルの多くを持っていなかった場合

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

非常に良い!ありがとう、たくさんの仲間。 – Global

1

これを実行する方法はたくさんあります。私の頭の上から離れてPanelクラスをサブクラス化してプロパティを追加し、forループを使ってそのプロパティに基づいて可視性を設定することができます。で、その後

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

あなたは、カスタムパネル(またはものは何でもあなたがそれらを呼び出す)を使用して、既存のパネルを交換する必要がありますと:分類-SUBパネル:

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

    } 
} 

そして、パネルを切り替える方法デザイナー、各パネルにパネルタイプを設定します。

関連する問題