Laden...

gut sortierbare Liste von Panels

Erstellt von H2SO4 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.173 Views
H
H2SO4 Themenstarter:in
209 Beiträge seit 2007
vor 10 Jahren
gut sortierbare Liste von Panels

Hallo,

in einer Anwendung die ich geschrieben habe kommt es bei zu großen Datenmengen zu Problemen. Daher schreibe ich sie neu. Um es diesmal besser zu machen meine Frage.

Ich habe in verschiedenen Forms eigene Panels (> 300) die alle eine unterschiedliche höhe haben können.
Durch verschiedene Events wird die Sortierung der Panels recht häufig geändert.
Bisher habe ich dies einfach so gemacht, dass ich eine Liste aller Panels durchgegangen bin und deren Y koordinate neu gesetzt habe. Zudem kann es vorkommen dass sich auch die Höhe geändert hat.
Anschließend wurde alle Panels an ihrer aktuellen Position refreshed.

Ich hätte gerne eine Möglichkeit dies zum einem leichter zu gestalten und zum anderen das refreshen zu beschläunigen bzw alles zu verschlanken.
Ich habe mir vorgestellt, ob ich in das Form eine Tabelle mit einer Spalte oder ähnliches packe und in jeder Zeile ein Panel steckt. Anschließend kann ich zb. das Panel an Position 146 auf die Position 2 schieben.

Ist dies der richtige Weg oder gibt es einen besseren?

T
708 Beiträge seit 2008
vor 10 Jahren

Guten Morgen H2SO4,

was stellst Du denn mit den Panels an? Mehr als 300 sind natürlich schon eine Menge. Wenn diese nicht so kompliziert aussehen, empfiehlt es sich in jedem Fall 300 Rectangles selbst zu zeichnen und im OnPaint der Form die sich ändernden Bereiche neu zu zeichnen.
Dazu sollte man, genau so wie Du es schon mit der Liste machst, die Grafik-Objekte in einer Liste vorhalten.
Hier hat herbivore das excellent beschrieben: [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)

H
H2SO4 Themenstarter:in
209 Beiträge seit 2007
vor 10 Jahren

Die Panels sind alle recht komplex und sind ansich Container für meine Knöpfe. Weitere Panels, Textboxen, Bilder usw. Also einfach ein Rechteck nehmen geht nicht.

Ich habe ansich 3 Arten von Klassen die jeweils von Panel erben. In diese Packe ich meine ganzen Dinge die ich eigentlich brauche. Die befüllten Panels wiederum packe ich in den jeweiligen Abschnitt meiner Form.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo H2SO4,

300 Panels, die jeweils mehrere Controls beinhalten, also insgesamt vermutlich (deutlich) mehr als 1000 Controls geht ziemlich sicher schief. Die einzige mir bekannte Alternative, außer die Anzahl der Controls zu reduzieren, ist tatsächlich alles selber zu zeichnen. Zu fast jedem Control-Typ gibt es einen passenden Renderer, mit dem man etwas zeichnen kann, was für den Benutzer wie das Control selbst aussieht, ohne ein Windows-Forms-Control zu sein. Natürlich muss man dann leider die Bedienung der Controls nachprogrammieren, wenn er Benutzer sie bedienen können soll. Insofern ist die Reduktion der Anzahl der Controls meistens der einfacherer Weg.

herbivore

W
955 Beiträge seit 2010
vor 10 Jahren

Hi,

Eine Möglichkeit bestünde noch darin, WPF zu verwenden. Die DependenyProperties als Fliegengewichte machen sich hier stark bemerkbar. Ich habe das mal erfolgreich bei einem WinForms-FlowLayoutPanel mit bis zu 1000 usercontrols umgesetzt, während bei WinForms die Controls manuell gezeichnet werden mussten, ließ sich das unter WPF problemlos umsetzen.
Allerdings ist dann natürlich viel Neues zu lernen und ein schneller Erfolg ist damit wahrscheinlich nicht möglich.

H
H2SO4 Themenstarter:in
209 Beiträge seit 2007
vor 10 Jahren

Bäh. So eine Antwort wollte ich eigentlich nicht hören 😁 🙄 😁 😁

Naja kann man wohl nichts machen. Muss ich wohl die Anzahl der Panels die ich Gleichzeitig anzeige reduzieren. Habe auch schon ein paar Ideen wie ich das machen kann. (Auch wenn es noch mehr Arbeit ist 🙁 )

Dank euch sehr für euren Input