ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
2622
2622
EMPFEHLEN
-
Hi,
ich bastle gerade an einem Programm, das mir verschiedene Grafiken in ein und demselben Fenster zeichnet. Was genau gezeichnet wird, hängt ganz vom Input (Konsole, XML-File usw.) ab. Daher kann ich im voraus nicht wissen, was GDI zeichnen soll.
Damit das Fenster auch schön brav neu gezeichnet wird, malt GDI bei der Berechnung in ein Bitmap, welches dann im Paint-Ereignis der Formulars angezeigt wird.
Wenn ich allerdings die Grösse des Fensters verändere (wobei das Bild natürlich angepasst/verzerrt wird), beginnt die Flackerei (der weisse Hintergrund wird ganz kurz sichtbar).
Das Problem scheint zu sein, dass mein Zeichenbereich schon vor dem Paint-Ereignis gelöscht wird.
Kennt jemand eine Möglichkeit, dies zu verhindern?
(Ich programmiere in VB.NET für .NET 2.0)Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
-
Naja, beim Resizen wird der Inhalt neu gezeichnet.
Wirf mal den folgenden Code in den Constructor deiner Form
Code :1 2 3
SetStyle( ControlStyles.UserPaint, true ); SetStyle( ControlStyles.AllPaintingInWmPaint, true ); SetStyle( ControlStyles.DoubleBuffer, true );
-
Hat nichts geholfen..
DoubleBuffer funktioniert aus irgend einem Grund nicht. Ich erhalte eine InvalidArgument Exception von der Application.Run Methode.
Es soll beim Resizen ja auch neu gezeichnet werde aber erst, wenn das "Bild" angepasst wurde. Das alte Bild soll so lange sichtbar bleiben bis das neue Bild verfügbar ist.
Gibt es irgend ein Event, das mir sagt, wann es nötig ist mein Fenster neu zu zeichnen.
Hat das irgendwas mit "Validierung" zu tun?Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
-
Ich hab die Lösung!
Ich habe in meinem Formular einfach die onPaintBackground-Methode überschreiben, die eigentlich das PaintBackground-Ereignis auslösen würde.
Somit wird der Hintergrund eben nicht gezeichnet, bevor das Paint-Ereignis ausgelöst wird, was mir die Möglichkeit gibt, das neuzeichnen so lange wie nötig herauszuzögern.
Allerdings habe ich jetzt ein anderes Problem. Folgender Code generiert ab und zu eine InvalidOperationException mit der Meldung, ich würde das Formular aus einem anderen Thread heraus ändern, als es erstellt wurde. Ok, darauf war ich vorbereitet. Deswegen auch das If InvokeRequired. Und Trotzdem taucht dieser Fehler immer noch auf... SyncLock kann ich ja nicht verwenden, da ich mich dann mit einem DeadLock konfrontiert sähe...
Code :1 2 3 4 5 6 7 8 9 10 11 12
If Me.InvokeRequired Then Me.Invoke(New Champ.Framework.voidSimpleCall(AddressOf changeResizeLevel)) Exit Sub End If Select Case RLevel Case ResizingLevel.explicit Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow Case ResizingLevel.final Me.FormBorderStyle = Windows.Forms.FormBorderStyle.SizableToolWindow Case ResizingLevel.implicit Me.FormBorderStyle = Windows.Forms.FormBorderStyle.SizableToolWindow End Select
Zu jedem Problem gibt es mindestens eine Lösung.
Zu jeder Lösung gibt es mindestens eine bessere Lösung
Ähnliche Themen
-
flackern bei mouse over / out
Von mauci im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 11.08.09, 08:00 -
Flackern beim Paint von MDI-Hintergrund
Von Athor im Forum .NET Windows FormsAntworten: 0Letzter Beitrag: 23.02.09, 16:06 -
Flackern im CRichEditCtrl
Von jokey2 im Forum VisualStudio & MFCAntworten: 9Letzter Beitrag: 14.05.07, 15:00 -
Flackern
Von NMO im Forum VisualStudio & MFCAntworten: 6Letzter Beitrag: 18.04.06, 23:24 -
flackern bei Mdi-Childs
Von masmin im Forum .NET Windows FormsAntworten: 4Letzter Beitrag: 20.10.05, 11:19





Zitieren
Login





