Entwickler-Ecke

WinForms - TabPages bauen sich zu langsam auf


Joey86 - Do 16.09.10 11:25
Titel: TabPages bauen sich zu langsam auf
Moin!

Ich hab ein Problem mit meinem TabControl bzw. mit den darauf liegenden TabPages...sie bauen sich einfach zu langsam auf.
Wenn ich das Programm zum ersten Mal starte, dann ist das ja nicht so schlimm, aber wenn ich das zwischen den verschiedenen TabPages wähle und es müssen noch immer irgendwelche Buttons oder Labels gezeichnet werden, dann nervt das einfach. Das ist natürlich auch nur der Fall, wenn sich auf dem TabPage viele Elemente befinden.
Gibt es aber keine Möglichkeit das zu unterdrücken und ggf. auf ein einmaliges (langes) Laden zu beschränken?

Gruß


Ralf Jansen - Do 16.09.10 12:12

Zitat:
Gibt es aber keine Möglichkeit das zu unterdrücken und ggf. auf ein einmaliges (langes) Laden zu beschränken?


Auf überfüllte Tabpages verzichten? Ist eh besser für den User und besser für die Repaint Zeiten.

Wenn du dich wirklich davon überzeugt hast das es nicht an eigenem Code liegt den du beim Tabwechsel oder beim sichtbar werden bestimmter Controls selbst dran programmiert hast wäre noch zu prüfen ob es auch ohne dranhängenden Debugger (also mal ohne Visual Studio starten wenn du das noch nicht getan hast) zu langsam ist. Der Debugger verlangsamt, insbesondere die graphische Darstellung von Winforms, erheblich.


Joey86 - Do 16.09.10 13:47

Also ohne den Debugger hab ich es schon probiert, das bringt nichts oder nur wenig.


Auf TabPages verzichten? Mhh...ich vermute mal, dass Windows Forms dann generell nicht dafür geeignet ist, zwischen verschiedenen Seiten umzuschalten, oder? Verwendet man dafür andere Technologien?


Ralf Jansen - Do 16.09.10 14:53

Zitat:
Auf TabPages verzichten?


Nein. Lies noch mal. Ich habe von überfüllten Tabpages gesprochen.
Winforms ist relativ langsam unabhängig ob man ein TabControl einsetzt oder nicht. Aber nicht so langsam das, wenn man sich in der gleichzeitig angezeigten Control menge im sinnvollen Bereich bewegt, Probleme haben sollte.
Mein Vorschlag sollte darauf hinweisen das wenn du mehrere Dutzend gleichzeitig angezeigte Controls hast diese auf mehrere einzelne Formen oder zusätzliche weiter Tabpages sinnvoll verteilst. Denn sobald Winforms überfordert ist ist höchstwahrscheinlich auch der User vor dem Bildschirm überfordert.


Th69 - Do 16.09.10 18:55

Hallo Joey86,
bei vielen Controls solltest du dir überlegen, ob du evtl. besser Gruppenelemente (z.B. ListView, DataGridView etc.) benutzt oder aber stattdessen einzelne Elemente selber zeichnest.

Zum Nachlesen empfehle ich mal folgende Beiträge aus dem MyCSharp-Forum:
[Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox): http://www.mycsharp.de/wbb2/thread.php?threadid=21782
[Artikel] Einführung: Zeichnen Optimieren / Schnelles zeichnen: http://www.mycsharp.de/wbb2/thread.php?threadid=28527

PS. Ich habe auch schon Programme mit TabPages und mehreren anderen Unterelementen (einige davon sogar selber wieder TabPages) erstellt. Große Geschwindigkeitseinbußen beim Umschalten der TabPages habe ich nicht feststellen können. Ich hatte aber das Problem, daß Windows nur eine bestimmte Anzahl an Window-Handles unterstützt und irgendwann kam dann bei mir "Can not create Window Handle" und dann bin ich auf dynamische Controls umgestiegen.

Wie Ralf Jansen schon geschrieben hat, führst du beim Umschalten irgendwelchen eigenen Code aus (oder werden evtl. zuviele Events abgearbeitet)?


Joey86 - Do 16.09.10 20:19

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:

Wie Ralf Jansen schon geschrieben hat, führst du beim Umschalten irgendwelchen eigenen Code aus (oder werden evtl. zuviele Events abgearbeitet)?

Eigentlich nicht. Im Grunde wurde der Code komplett vom WinForms Designer in VS erzeugt.

Damit ihr mal nen Eindruck bekommt:
Eines der Tabs hat so knapp zehn Labels, zwei Buttons, eine ComboBox und eine CheckBox. Ich hab, und das ist dann vermutlich der Verursacher meines Problems, für die Tabs BackgroundImages. Ich wusste nur nicht, dass sich das so dermaßen auf die Performance auswirkt. Aber ansonsten seht ihr ja, dass ich nicht allzu viel Elemente auf meiner TabPage hab.

Gruß


Ralf Jansen - Do 16.09.10 21:09

Die Labels sind transparent so das der Background durchscheint? Da bist du, neben den leidlichen Fähigkeiten von Winforms, auf eine echte Schwäche gestoßen. Simulierte Transparenz ;)


Joey86 - Fr 17.09.10 11:01

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Die Labels sind transparent so das der Background durchscheint? Da bist du, neben den leidlichen Fähigkeiten von Winforms, auf eine echte Schwäche gestoßen. Simulierte Transparenz ;)


Jap, die sind größtenteils transparent.
Naja, dann werd ich das wohl so hinnehmen. :wink:

Danke!