C#: scheinbar einfaches Problem

Für alles, was nicht mit fischertechnik zu tun hat.
Miscellaneous - everything that has nothing to do with ft
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Majus
Beiträge: 129
Registriert: 30 Nov 2010, 15:35
Wohnort: Deutschland

C#: scheinbar einfaches Problem

Beitrag von Majus » 21 Aug 2013, 20:58

Hallo,

nachdem mir keine Recherche bei Google weitergeholfen hat, habe ich eine Frage zu C#

Mein Problem ist, dass ich ca. 200 Panels mit aufsteigendem Namen habe, also Feld1, Feld2, Feld3 und so weiter...
Und jetzt will ich alle Panels unsichtbar machen, bin aber zu faul
Feld1.Visible = false;
Feld2.Visible = false; ...
Ich wollte eigentlich eher so was, aber das geht logischerweise nicht (siehe fette Zeile!):
public int Feldnummer;
public string Feldname;

Feldnummer = 1;
while (Feldnummer <= 200)
{
Feldname = "Feld" + Feldnummer;
Feldname.Visible = false;
Feldnummer = Feldnummer + 1;
}
Und da string.Visible ja Nonsens ist, führt das zwangsläufig zu Misserfolg...

Wie kann ich dem Compiler mitteilen, dass der String eigentlich der Name eines Panels ist?

Ich habe jetzt nahezu alles probiert einschließlich einpflügen einer neuer Klassenbibliothek - alles war ohne Erfolg.

Gruß

Majus

Benutzeravatar
steffalk
ft:pedia-Herausgeber
Beiträge: 1792
Registriert: 01 Nov 2010, 16:41
Wohnort: Karlsruhe
Kontaktdaten:

Re: C#: scheinbar einfaches Problem

Beitrag von steffalk » 21 Aug 2013, 22:21

Tach auch!

Variante 1 (unelegant, weil die Namen geprüft werden):

Code: Alles auswählen

foreach (ctl in Controls) {
   if (ctl.Name.StartsWith("Feld")) {
      ctl.Visible = false;
   }
}
Variante 2:

Code: Alles auswählen

// Klassenweit:
List<Control> myControls = new List<Control>;

// Da, wo Du die Controls erzeugst, fügst Du die relevanten der Liste myControls hinzu.

// Zum Ausblenden dann einfach:
foreach (ctl in myControls) {
   ctl.Visible = false;
}
Das geht, weil myControls ja nur die Controls enthält, die Du behandeln willst.

Gruß,
Stefan

vleeuwen
Beiträge: 1557
Registriert: 31 Okt 2010, 22:23
Wohnort: Enschede (NL)
Kontaktdaten:

Re: C#: scheinbar einfaches Problem

Beitrag von vleeuwen » 14 Sep 2013, 12:41

Or try an
ArrayList instead of a List.

See also: Panel.

Code: Alles auswählen


 ArrayList myPanels = new ArrayList();
For (int tel=0; tel<200;tel++)
{     
     Panel Feld= new Panel();
     Feld.Visible=false;
     Feld.Name="Feld" + tel.ToString(); //or   Feld.Text="Feld" + tel.ToString();
     Panels.Add(Feld);

}
 

In case the array already exists:

Code: Alles auswählen

    foreach ( Object obj in Panels )  ((Panel) obj).Visible=false;



Two remarks for the original code:

Code: Alles auswählen

public int Feldnummer;
public string Feldname;

Feldnummer = 1;
while (Feldnummer <= 200)
{
Feldname = "Feld" + Feldnummer.ToString();  //or          "Feld" +Convert.ToString(Feldnummer);
//Feldname.Visible = false;      //string does not know a attribute Visible 
Feldnummer = Feldnummer + 1;
}

Antworten