Entwickler-Ecke
Basistechnologien - List<Panel> auflistung um Panel auszublenden?
Chiyoko - Fr 29.01.10 03:41
Titel: List<Panel> auflistung um Panel auszublenden?
Ich hab eine Menge von Panel, und es werden wohl an die 1000.
Die erste Frage waere:...Ist es besser 200(?) UserControls anstatt 1000
Panel zu nutzen?Das Problem an der Sache waere nur die uebersichtlichkeit
im Explorer.
Mainfrage: Ich hab in einem UserControl an die 20 Panel.
Ich moechte alle ueber 20 Radiobuttons umschalten auf entweder Hide oder Show.
Nun dachte ich mir, ich will den vorhandenen Code etwas verfeinern,
denn 20 Methoden mit 20xpanel.hide(); sieht bloed aus und nimmt
nur Platz weg.
Also kam ich dazu, eine Liste zu erstellen.
(Oder ein Array?)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Testmethode() {
List<Panel> testP = new List<Panel>();
testP.Add(testpanel);
.... } |
So, soweit sogut aber wie kann ich jetzt alle auf einmal ausblenden?
Bzw muss ich unbedingt eine foreachschleife verwenden?
(Denn in dieser Schleife gehts ueber "item.Hide();")
Des weiteren wuerde ich die Methode dann in jeder Radiobutton methode
als "else" verwenden.(if (radioButton1.Checked) { XXX.Show();) else { Testmethode() })
Oder gibt es einen besseren Weg?
Danke fuer jeden Tip.
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
jaenicke - Fr 29.01.10 07:26
Chiyoko hat folgendes geschrieben : |
Bzw muss ich unbedingt eine foreachschleife verwenden?
(Denn in dieser Schleife gehts ueber "item.Hide();") |
Ja, automatisch geht das nicht.
Chiyoko hat folgendes geschrieben : |
| Oder gibt es einen besseren Weg? |
Was das spezielle Vorgehen angeht nicht, aber das...
Chiyoko hat folgendes geschrieben : |
| Ich hab eine Menge von Panel, und es werden wohl an die 1000. |
...hört sich nach einem fehlgeschlagenen Konzept an. Ich habe auch schon sehr umfangreiche Programme geschrieben, aber eine derartige Anzahl von Komponenten brauchte ich noch nie. Lässt sich da nichts wiederverwenden oder so? Ich meine die 1000 Panels können doch schlecht alle parallel sichtbar sein.
Denn mit so vielen Panels auf einem Formular dürftest du ernste Performance-Probleme bekommen.
Chiyoko - Fr 29.01.10 11:39
Erstmal danke fuer deine Antwort.
Chiyoko hat folgendes geschrieben : |
Bzw muss ich unbedingt eine foreachschleife verwenden?
(Denn in dieser Schleife gehts ueber "item.Hide();")Ja, automatisch geht das nicht. |
->Bin noch Anfaenger
| Zitat: |
Chiyoko hat folgendes geschrieben : | | Oder gibt es einen besseren Weg? | Was das spezielle Vorgehen angeht nicht, aber das... Chiyoko hat folgendes geschrieben : | | Ich hab eine Menge von Panel, und es werden wohl an die 1000. | ...hört sich nach einem fehlgeschlagenen Konzept an. Ich habe auch schon sehr umfangreiche Programme geschrieben, aber eine derartige Anzahl von Komponenten brauchte ich noch nie. Lässt sich da nichts wiederverwenden oder so? Ich meine die 1000 Panels können doch schlecht alle parallel sichtbar sein.
Denn mit so vielen Panels auf einem Formular dürftest du ernste Performance-Probleme bekommen. |
Das ist schlicht eine grosse Bibliothek..ich koennte auch alles zur Laufzeit generieren
und setzen, aber dann vergeht mir der Ueberblick(und die Lust).
Jedes Panel /UserControl ist einmalig und wird nicht wiederverwendet.
Darum auch die Frage, ob ich nun lieber UC verwenden sollte oder Panel...
Es wird auch jeweils nur eines zu sehen sein.(Also ein UC und Panel mit einem
splitcontainer und einigen Steuerelementen wie Radiobutton etc)
Performance probleme bekomme ich auch nach 5000 Panel nicht.
(Die sind ja nicht zur Laufzeit sichtbar)
Man muesste sie viell. dynamisch nachladen, aber das moechte ich nicht.
Ralf Jansen - Fr 29.01.10 11:43
| Zitat: |
| So, soweit sogut aber wie kann ich jetzt alle auf einmal ausblenden? |
C#-Quelltext
1:
| testP.ForEach(x => x.Hide()); |
Ist aber letztlich auch nur ein etwas kompakterer foreach.
Wofür braucht man 1000 Panels gleichzeitig? Dir sollte bewusst sein das jedes Control ein GDI Handle braucht und die sind endlich (ca. 10000 pro Prozess und 32000 pro Session) mal abgesehen von den vermutlichen Performanceproblemen.
Chiyoko - Fr 29.01.10 11:58
Danke schoen:)
Nein, du hast mich missverstanden.
Stell dir mal ein Treeview vor...und jeder Treeview-node schaltet ein
UserControl um auf Hide/Show.(Ja, immer nur "1"Panel).
Und wenn dieses eine UC zu sehen ist, sind auf diesem sichtbaren UC
auch wieder mehrere Panel, wobei auch nur "1" Panel sichtbar ist
und ausser dem Rendern einiger Radiobuttons mit transparenz hab ich
durch dieses Prinzip keinerlei Probleme.
Ausser vermutlichen Speicherproblemen und etwas laengerer Ladezeit
am Anfang duerfte ich keine Probleme bekommen..(oder?)
Aber da ich das schlkecht erklaeren kann, hier mal ein Bild:
http://www.imgbox.de/users/public/images/l47733j22.jpg
(Keine Kritik bitte, das ist ein just for fun Projekt fuer mich
und soll als Ziel das Erlernen von C# zur Folge haben...und das
tut es auch:))
EDIT: Fragen wir mal anders->Wie kann ich denn auf genau ein Panel zugreifen?
Ueber einen Index und die List<> auf string Parameter einstellen?
Mein Versuch war erfolglos...aber ich probiers mal auf anderen Wegen.
Bzw kann ich ueber ein Event alle Methodenabfragen von den RAdiobuttons
zusammennehmen?
___________________________________________________________________________
EDIT: Hat sich geklaert, ich benutze USerControls und binde sie so ein.
Das spart platz und Ressoucen, zeitgleich kann ich diese noch bearbeiten
und in extra Ordner packen.
Somit brauch ich auch keine Liste, da es maximal 4 Panel sind.
@mod: Wusste nicht, das es hier auch C Sharp codetags gibt.Danke.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!