Hallo,
ich zeige ein Bild auf einem Panel an. Darüber habe ich ein transparentes Control gesetzt auf dem ich zeichne (wie MSPaint). Das funktioniert eigentlich ganz gut, nur flackern die Zeichnungen sehr, wenn ich zeichne.
Ich habe schon alles mögliche versucht wie OptimizedDoubleBuffer und den DoubleBuffer "manuell" zu steuern.
Allerdings hat das alles nicht funktioniert. Der OptimizedDoubleBuffer von .NET führt zu einem schwarzen Bildschirm.
Hat jemand Erfahrungen damit?
Danke und Gruss
Hallo stef!
Mhm, warum zeichnest du nicht gleich das Panel? 😉
vg,
Simon
Es gibt Gründe warum ich nicht direkt in das Panel zeichne 🙂
Es wäre aber echt gut wenn jemand einen Tip hat wie man bei einem transparenten Control DoubleBuffering aktivieren kann bzw. auf anderem Wege das Flackern verringern.
Gruss
Hallo stef,
hast du DoubleBuffer für Panel und Control gesetzt?
Es gibt Gründe warum ich nicht direkt in das Panel zeichne
Bist du dir sicher, dass die stichhaltig sind? 🙂
herbivore
In der MSDN ist ein Bug dokumentiert, der besagt, dass DoubleBufer und Transparenz nicht miteinander arbeiten können (oder so ähnlich) --> geht also nicht.
Gruß, Christian.
Erstmal danke für die Antworten. den Beitrag in der msdn hab ich auch gelesen. Transparenz und DoubleBuffer funktioniert nicht. Allerdings ist da nur der interne DoubleBuffer gemeint (also mit SetStyle())
Man kann aber zum Beispiel das DoubleBuffering selbst in die Hand nehmen
Leider kam ich damit auch noch nicht wirklich weiter. Vielleicht hat ja jemand noch einen Trick auf Lager 🙂
Gruss
Also bei mir tut der Code von Codeproject einwandfrei. Was hast du damit für Probleme?
Gruß, Christian.
Welche Version von dem CodeProject Code hast du denn verwendet? Den für .NET1.1 oder .NET2.0 ?
Hast du ein transparentes Panel auf dem zu Zeichnest? Also ich zeichne wie in MSPaint Freihand oder Linien etc...
Bei mir wird mit der manuellen Lösung während ich zBsp. eine Linie zeichne die vorherigen Linien bei manuellem DoubleBuffer nicht überzeichnet, weil sie ja immernoch auf dem Bitmap gezeichnet sind, das später wieder angezeigt wird.
Gruss
Der OptimizedDoubleBuffer von .NET führt zu einem schwarzen Bildschirm.
Wie setzt du denn den DoubleBuffer?
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();