2017-09-20 3 views
-1

Ich habe 25 Panel-Kontrolle (Sichtbar falsch). Ich möchte es sichtbar machen.Panel-Steuerung mit Variablenname

Aber es funktioniert nicht: (Fehler 1 'string' enthält keine Definition für 'Sichtbar' und keine Erweiterungsmethode 'Sichtbar' konnte ein erstes Argument vom Typ 'string' gefunden werden (fehlt eine a using-Direktive oder ein Assemblyverweis?) )

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

Hilfe

Antwort

1

Der Code ist in so vielen Fronten falsch.

Wie es ist, was Sie tun, ist 25 Strings mit Werten zu schaffen panel0, panel1, panel2 etc. und versucht, einen Wert auf eine Eigenschaft davon zuzuweisen. Aber Zeichenfolgen enthalten keine Eigenschaft mit dem Namen Visible. Sie erhalten also offensichtlich einen Fehler.

Was Sie tun möchten, ist in Ihrem Formular Steuerelement des Typs Panel zu bekommen, und legen Sie ihre Werte fest.

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

Caveat: die oben nur Panel Kontrollen in Ihrer obersten Form finden. Wenn es Steuerelemente gibt, die verschachtelt sind, möchten Sie vielleicht eine Methode schreiben, um diese rekursiv zu finden. Oben ist nur, um Ihnen die Idee zu geben.

Wenn Sie mehrere Panel Steuerelemente haben und wenn Sie nur die Eigenschaften dieser Anzeigenamen auf Ihre Namenskonvention einstellen möchten, können Sie sie ausfiltern.

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

Hier legen Sie für die richtige Panel Namen suchen kann eine Regex durch, verwenden Sie eine benutzerdefinierte Funktion usw.

+0

25 ist ein Beispiel. In meinem Code ist es variabel. Manchmal möchte ich 4 Panels sichtbar machen 25 (25 ist maximal) – harbii

+0

Ja, also bitte folge meinem Beispiel. Es wird dir in die richtige Richtung helfen. – Sach

+0

DANKE! Sach – harbii

1

Sie speichern können, die alle dynamisch erstellten Panels zu einer Sammlung, aus dem sie durch ihre verweisen Name. Eine solche Sammlung ist Dictionary.

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

Jetzt können Sie sie sichtbar machen/unsichtbar wie folgt.

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

oder wenn Sie alle Panels ein- oder ausblenden möchten, können Sie wie folgt vorgehen.

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