Laden...

Maximale Anzahl an SubControl-Ebenen? [==> Keine harte Beschränkung aber Performance-Problem drohen]

Erstellt von pinki vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.359 Views
pinki Themenstarter:in
709 Beiträge seit 2008
vor 10 Jahren
Maximale Anzahl an SubControl-Ebenen? [==> Keine harte Beschränkung aber Performance-Problem drohen]

Hallo Gemeinde,
ich bin gerade dabei ein Programm zu warten.
In diesem Programm gibt es Blöcke, die auf einer Arbeitsfläche als eine Art Stapel dargestellt sind.
Diesem Stapel kann man weitere Blöcke per Drag&Drop hinzufügen. Hierbei ist es egal, an welcher Stelle im Stapel der neue Block hinzugefügt wird (nur ganz oben geht nicht). Der Stapel ist so aufgebaut, dass der oberste Block der StartBlock ist. Jeder darunter hinzugefügte Block ist jeweils ChildControl des übergeordneten Blocks.

Jetzt gibt es jedoch beim Hinzufügen der Blöcke folgenden Effekt. Sobald man 42 Blöcke hinzugefügt hat (der Startblock zählt nicht mit), wird die Arbeitsfläche zwar größer, aber alle Blöcke bis auf der Startblock und der zuletzt hinzugefügte Block verschwinden.

Jeder Block ist ein UserControl und zeichnet sich per OnPaint selbst. Der Kindblock wird unter dem Block dargestellt.

Ich finde den Fehler einfach nicht und frage mich, ob es eine Maximaltiefe bei der Verschachtelung von Steuerelementen gibt.

Habt ihr sowas schon mal gehabt und könnt mir einen Rat geben, worauf man bei der Suche nach der Ursache eines solchen Effekts noch achten sollte?

Gruß
pinki

C
2.121 Beiträge seit 2010
vor 10 Jahren

Probier das doch einfach mit Panels aus. Setz viele ineinander und schau wann es kritisch wird. Dann als nächstes mit GroupBoxen, da das wirklich sichtbare Controls sind.

Zu deinem Vorhaben kann wahrscheinlich keiner was sinniges sagen, da niemand weiß wie du vorgehst. Zum Beispiel mit dem Vergrößern, keiner weiß was da passiert und was noch alles gecodet ist und nicht funktioniert.

Wäre es möglich dass du keine Controls verschachtelst sondern nur eine Objektstruktur entsprechend aufbaust und das alles in ein einziges Control zeichnest?
Wäre sicher resourcenschonender.

S
145 Beiträge seit 2013
vor 10 Jahren

Ich denke auch das hier eher die performance das Problem sein wird.

Ich muss da an mein OpenGL Projekt zurück denken.
Da hatte ich auch einen Welt Editor zum erstellen eigener Welten.
Der erste Versuch mittel "vielen" PictureBoxen war performance mäßig, naja.
Alles direkt auf der Form zu zeicnhen mit allen ,möglichen Ebenen, und drag und draop unterstützung, war wieviel effektiver.
Im Prinzip muss man ja nur die Koordinaten kennen wo was ist.

Ich erwähne dies blos mit da hier auch von OnPaint der UserControls die Rede war, und dieser "Block Angabe".
Und so laut Beschreibung fält mir ehrlich gerade Majong, dieses Spiel, ein.
Da würde das zeichnen auf einer Ebene blos, aufjedenfall helfen.

Nachtrag: Der Editor war in GDI+ gehalten.

pinki Themenstarter:in
709 Beiträge seit 2008
vor 10 Jahren

Probier das doch einfach mit Panels aus. Setz viele ineinander und schau wann es kritisch wird. Dann als nächstes mit GroupBoxen, da das wirklich sichtbare Controls sind.

Super Idee, danke! 😃
Das wurde auch gleich umgesetzt.

Ergebnis: Wenn man das Fenster selbst mitzählt, sind insgesamt 50 "Ebenen" erlaubt.

Mal sehen, wann Zeit ist das alles umzustricken.

Besten Dank!
pinki

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo pinki,

man sollte - unabhängig von den Schachtelung - nie Controls verwenden, wenn beim Hinzufügen die Anzahl unbeschränkt ist. Schon ab ca. 100 Controls kann es auf langsamen Rechner Performance-Probleme geben und ab ein paar hundert auch auf schnellen. Die Lösung ist, alles selbst direkt ins Form zu zeichnen, siehe [Artikel] Zeichnen in Windows-Programmen und [Tutorial] Gezeichnete Objekte mit der Maus verschieben.

herbivore

4.221 Beiträge seit 2005
vor 10 Jahren

Und ab einer gewissen Anzahl Controls sind dann die verfügbaren WindowHandles aufgebraucht und die Anwendung raucht ab (nicht abfangbarer Fehler)

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

pinki Themenstarter:in
709 Beiträge seit 2008
vor 10 Jahren

Besten Dank für die vielen Tipps. 😃

Die Anzahl der Blöcke wurden nun erst mal begrenzt.
Sobald Zeit ist wird die Anwendung dann mal so angepasst, dass es besser gemacht wird.

Gruß
pinki