2017-09-20 5 views
-1

私は25個のパネルコントロール(Visible false)を持っています。 私はそれを見えるようにしたい。変数名を持つパネルコントロール

(エラー1 '文字列'には '可視'の定義が含まれておらず、 '文字列'の最初の引数を受け入れる拡張メソッド '可視'はありません。ディレクティブまたはアセンブリ参照を使用して?) )

for (int i = 0; i < 25; i++) 
{ 
    string panelID = "panel" + i.ToString(); 
    panelID.Visible = true; 
} 

ヘルプ

答えて

1

あなたのコードは、非常に多くの前線で間違っています。

これは、値panel0panel1panel2などの25個の文字列を作成し、そのプロパティに値を割り当てようとしていることです。しかし、文字列にはVisibleという名前のプロパティは含まれていないので、明らかにエラーが発生します。

フォームにPanelタイプのコントロールを保持し、その値を設定します。

foreach(var panel in this.Controls.OfType<Panel>()) 
{ 
    panel.Visible = true; 
} 

警告:上のフォームは、Panelのコントロールが最上位のフォームにのみ存在します。ネストされたコントロールがある場合は、それらを再帰的に見つけるメソッドを記述したいと思うでしょう。上記はちょうどあなたのアイデアを与えることです。

さらに、Panelコントロールが複数ある場合、それらのパネル名のプロパティーを命名規則に合わせて設定したい場合は、それらを除外することができます。ここで

foreach(var panel in this.Controls.OfType<Panel>()) 
{ 
    if(panel name fits your naming convention) 
     panel.Visible = true; 
} 

、カスタム関数を使用し、Regexを使用して、正しいパネル名を探すことができますなど

+0

です。私のコードでは可変です。時々、私は4枚のパネルを何度か見たいと思っています.25(最大は25) – harbii

+0

ええ、私の指導に従ってください。それは正しい方向にあなたを助けます。 – Sach

+0

感謝します! Sach – harbii

1

あなたは自分でそれらを参照することができ、そこからコレクションにすべての動的に作成されたパネルを保存することができます名。そのようなコレクションの1つが辞書です。

public class Form1 : Form 
{ 
    Dictionary<string, Panel> panels = new Dictionary< string, Panel>(); 
    public void Form1_Load(object sender, EventArgs e) 
    { 
     for (var i = 0; i < 25; I++) 
     { 
      Panel panel = new Panel(); 
      panel.Name = "panel" + i.ToString(); 
      this.Controls.Add(panel); 
      panels.Add(panel.Name, Panel); 
     } 
    } 
} 

次のように表示/非表示にすることができます。

private void ShowHidePanel(int panelNumber, bool visible) 
{ 
    panels["panel"+panelNumber.ToString()].Visible = visible ; 
} 

または、次のようにすべてのパネルを表示または非表示にしたい場合。

private void ShowHidePanels(bool visible) 
{ 
    for (var i = 0; i < 25; i++) 
    { 
     panels["panel" + i.ToString()].Visible = visible; 
    } 
} 
関連する問題