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!

C#: scheinbar einfaches Problem

Beitragvon 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
Majus
 
Beiträge: 129
Registriert: 30 Nov 2010, 16:35
Wohnort: Deutschland

Re: C#: scheinbar einfaches Problem

Beitragvon 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
Benutzeravatar
steffalk
ft:pedia-Herausgeber
 
Beiträge: 892
Registriert: 01 Nov 2010, 17:41
Wohnort: Karlsruhe

Re: C#: scheinbar einfaches Problem

Beitragvon 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;
}
Benutzeravatar
vleeuwen
 
Beiträge: 916
Registriert: 31 Okt 2010, 23:23


Zurück zu Diverses

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast