Laden...

DoubleBuffered Controls in einer PictureBox

Erstellt von Tessendor vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.799 Views
T
Tessendor Themenstarter:in
5 Beiträge seit 2010
vor 13 Jahren
DoubleBuffered Controls in einer PictureBox

Hallo zusammen,

ich muss für meinen Arbeitgeber ein Projekt fertigstellen.
Leider hat mein Vorgänger sämtliche GUI Elemente auf PictureBoxen und nicht auf Panels gezeichnet.

Jetzt habe ich das Problem, das alle ScrollBars beim verschieben heftig flackern.

DoubleBuffered = true geht ja nur auf Panels.

Alles auf Panels umstellen ist keine Option.

Jemand ne Idee, wie ich mehr oder weniger einfach DoubleBuffering realisieren könnte?

Vielen Dank

A
69 Beiträge seit 2010
vor 13 Jahren

Picturebox hat bereits aktivierten Doublebuffer. Die Ursache des Flackerns kannst du somit so nicht bekämpfen.

5.742 Beiträge seit 2007
vor 13 Jahren

Leider hat mein Vorgänger sämtliche GUI Elemente auf PictureBoxen und nicht auf Panels gezeichnet.

Ich kenne zwar das Projekt nicht, aber evtl. kannst du ja die PictureBoxen einfach durch Panels ersetzen.

T
Tessendor Themenstarter:in
5 Beiträge seit 2010
vor 13 Jahren

Hallo zusammen,

ich habe vorher die Zeit gefunden mich noch ein wenig mit dem Problem zu beschäftigen. So wies aussieht, ist die Situation ein klein wenig anders:

Ich habe eine eigene Klasse MediaButton. Diese Erbt von Control, damit ich ein paar eigene Features einbauen kann.
Hat auch eine eigene OnPaint Methode.

Für diese Klasse habe ich im Initiator jetzt


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

gesetzt.

Ist das Theoretisch richtig? oder Muss das Zwangsläufig in den Initiator der MainForm? Weil wenn ich das mache, passiert nämlich: gar nix. Alles wie vorher

So, die Krux an der Geschichte ist jetzt: Die Controls werden nicht direkt auf die Form gezeichnet, sondern erst in eine PictureBox.
Allerdings: Wenn ich oben genannte Einstellungen in der MediaButton Klasse gesetzt habe wird die ganze PictureBox nicht mehr gezeichnet.

Langsam weiß ich echt nicht mehr weiter.
Wo stimmt da was nicht?

5.742 Beiträge seit 2007
vor 13 Jahren

Ist das Theoretisch richtig? oder Muss das Zwangsläufig in den Initiator der MainForm?

Du meinst sicherlich Konstruktor?
Ja - das ist so richtig (nimm BTW lieber OptimzedDoubleBuffer).

Die Controls werden nicht direkt auf die Form gezeichnet, sondern erst in eine PictureBox.

Warum das (immer noch)?
Eine PictureBox ist nicht wirklich dazu geeignet, andere Controls aufzunehmen - dafür gibt es _Panel_s.
Daran wird's wohl liegen. Probiere doch einfach mal aus, Panels zu verwenden.