Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Fr 29.01.10 03:41 
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?)

ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt


Zuletzt bearbeitet von Chiyoko am Fr 29.01.10 18:24, insgesamt 2-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 29.01.10 07:26 
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
Bzw muss ich unbedingt eine foreachschleife verwenden?
(Denn in dieser Schleife gehts ueber "item.Hide();")
Ja, automatisch geht das nicht.

user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
Oder gibt es einen besseren Weg?
Was das spezielle Vorgehen angeht nicht, aber das...
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Fr 29.01.10 11:39 
Erstmal danke fuer deine Antwort.

user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
Bzw muss ich unbedingt eine foreachschleife verwenden?
(Denn in dieser Schleife gehts ueber "item.Hide();")Ja, automatisch geht das nicht.


->Bin noch Anfaenger

Zitat:

user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
Oder gibt es einen besseren Weg?
Was das spezielle Vorgehen angeht nicht, aber das...
user profile iconChiyoko hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 29.01.10 11:43 
Zitat:
So, soweit sogut aber wie kann ich jetzt alle auf einmal ausblenden?

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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:

www.imgbox.de/users/...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.