Laden...

Eigenes Usercontrol Redraw problem

Erstellt von Seikilos vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.433 Views
S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren
Eigenes Usercontrol Redraw problem

Ich hab ein Usercontroll bei dem ich das OnPaint überladen habe.

Wenn ich dieses Objekt in der anwendung platziere, so wird es korrekt gezeichnet. Bedecke ich es nun aber teilweise, so wird die Komponente nicht neu gezeichnet.
Wenn ich einen Break Point habe und die gleiche Aktion ausführe, so wird der Breakpoint ausgelöst und das User Control wird dann korrekt dargestellt.

Das Usercontrol und die Elternanwendung haben bereits folgende Attribute:

this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);

Desweiteren hab ich ebenfalls OnPaintBackground überladen.
Vergesse ich einen Call?

Life is a short

5.299 Beiträge seit 2008
vor 13 Jahren

OnPaint sollte man überschreiben, nicht überladen.

Warum nimmst du ein UserControl - fügst du im Designer weitere Controls hinzu? - andernfalls kannnst du besser von Control direkt erben.

was meinst du mit UserControl teilweise bedecken?

Attribute sind in c# was anderes. Du hast da die genannten ControlStyles gesetzt. Ich glaub aber nicht, dass die eine Auswirkung auf dein Problem haben, ich vermute den Fehler eher bei wie du zeichnest.

Der frühe Apfel fängt den Wurm.

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Ich hab ein UserControl, das ein paar projektspezifische Parameter hat, darunter auch ein Image.
Diese Komponente wird mehrfach instantiiert und in einem MDI Kontext (mit Docking) benutzt. Wenn ich dieses Fenster mit meinen UserControls nun anders skaliere, also erst kleiner und dann primär größer mache, so müsste der Redraw das UserControl neu zeichnen. Dies passiert aber nicht, es wirkt so, als würde das Paint Event nicht aufgerufen werden, sprich mein Control wird visuell zerschossen. Beim verkleinern verschwindet ein Teil des Controls und beim Vergrößern wird der Bereich nicht neu gezeichnet.

Life is a short

5.299 Beiträge seit 2008
vor 13 Jahren

ah, da fehlt glaub der ControlStyle.OnResizeRedraw

Der frühe Apfel fängt den Wurm.

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Diese Option ist mir und der Doku unbekannt

Life is a short

3.511 Beiträge seit 2005
vor 13 Jahren

Weil das Ding ControlStyles.ResizeRedraw heißt.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 13 Jahren

Ah danke

Life is a short