Flackernde Form bei Hinzufügen/ Löschen von Controls ...

09/09/2008 - 16:57 von Frank Boehland | Report spam
Ein freundliches Hallo,

hier einmal das Wesentliche:

ich habe ein Formular mit Textboxen fester Pràgung, die untereinander
folgen. Eine Schaltflàche, die als Ein-/ Austaster arbeitet, ermöglicht das
Anlegen weiterer Textboxen zur Laufzeit. Diese schieben sich quasi zwischen
die feststehenden Textboxen, eine alternierende Reihenfolge also, das
Formular wird aufgeweitet.

Der Nutzer sieht einen flackernden Ablauf des Ganzen, dadurch noch
verstàrkt, dass die Controls-Auflistung durchlaufen wird, welche die Controls
ja auch nicht in ihrer exakten Reihenfolge enthàlt (zumindest, wenn mit dem
Designer gearbeitet wird).

Wie vorgehen?

Me.SuspendLayout() ... Me.ResumeLayout() beschleunigt, verhindert aber nicht
das Flackern.

Me.SetStyle(ControlStyles.DoubleBuffer ... wirkt an dieser Stelle auch nicht
recht.

Zwei Threads - der obere verdeckt, zeigt eine Sanduhr, der andere arbeitet -
ist mir etwas zu komliziert.

Was ratet ihr mir?

Vielen Dank schon mal ...
Frank
 

Lesen sie die antworten

#1 Karsten Sosna
10/09/2008 - 08:32 | Warnen spam
ich habe ein Formular mit Textboxen fester Pràgung, die untereinander
folgen.



Hallo Frank,
was heißt "fester Pràgung"?

Eine Schaltflàche, die als Ein-/ Austaster arbeitet, ermöglicht das
Anlegen weiterer Textboxen zur Laufzeit. Diese schieben sich quasi
zwischen
die feststehenden Textboxen, eine alternierende Reihenfolge also, das
Formular wird aufgeweitet.



Müssen das TextBoxes sein? Oder würde dort ein einfacher Text reichen?

Der Nutzer sieht einen flackernden Ablauf des Ganzen, dadurch noch
verstàrkt, dass die Controls-Auflistung durchlaufen wird, welche die
Controls
ja auch nicht in ihrer exakten Reihenfolge enthàlt (zumindest, wenn mit
dem
Designer gearbeitet wird).



Dann wurde im Designer nicht sauber gearbeitet.

Wie vorgehen?

Me.SuspendLayout() ... Me.ResumeLayout() beschleunigt, verhindert aber
nicht
das Flackern.



Hat ja auch nicht unbedingt was mit dem Zeichenvorgang zutun.

Me.SetStyle(ControlStyles.DoubleBuffer ... wirkt an dieser Stelle auch
nicht
recht.



Warum auch? DoubleBuffer beschràngt sich auf den Grafikkontext jedes
einzelnen Controls.

Zwei Threads - der obere verdeckt, zeigt eine Sanduhr, der andere
arbeitet -
ist mir etwas zu komliziert.


Mit Kanonen auf Spatzen schießen? ;=)

Was ratet ihr mir?


Erstmal würde ich das Layout überdenken,vielleicht tut es ja auch ein anders
Control, bspw. ein TreeView. Grundsàtzlich gibt es immer Probleme mit
Controls die ein-/ ausgeblendet, in der Größe veràndert oder in der Position
verschoben werden. Besser ist es ein eigenes Control zu entwerfen welches
genau die Fàhigkeiten besitzt die gefordert sind ohne den Einsatz von
konstitierenden Steuerelementen. Als Basisklasse eignet sich hier sehr gut
ScrollableControl.

Ähnliche fragen