Transparentes Panel auf PictureBox, in der gezeichnet wird, flackert!

Terminator2

Erfahrenes Mitglied
Hallo Leute,

Sitze gerade an einem wohl eher bekanntem Problem.

Ich habe eine PictureBox, die je nach Mausposition schonmal per Invalidate neu gezeichnet wird, halt ein wenig animiert. Funktionier auch alleine sehr gut.
Auf dieser PictureBox verwende ich ein FlowLayoutPanel, in dem ich kleine PictureBoxen mit Miniaturansichten lagere.
Um das Aussehen abzurunden, habe ich den Hintergrund des FLP tranparent gesetzt, was auch beim Standbild gut aussieht. Nur leider flackert das Panel immer dann kurz auf, wenn ich mit meiner Maus ein "Invalidate" der PictureBox auslöse. Ich kann mir nicht vorstellen, dass es da keine gute Lösung für gibt. Habe mich schon im Internet umgeschaut und den ein oder anderen Befehl eingefügt, allerdings ändern die bei mir gar nichts :(
Ich kann übrigens auch nicht auf das Panel verzichten, wäre sonst eine einfache Lösung ;)


Würde mich freuen, wenn mir Jemand von euch in irgendeiner Weise weiterhelfen könnte. Vielen Dank! :)
 

Terminator2

Erfahrenes Mitglied
Hey,

Wäre natürlich eine gute Idee. Allerdings ist das Flow Panel ja nur ein Teil meines Bildes. ich nutze es als eine Art Sidebar, in der ich dann Snapshots ablegen kann.
Die Picturebox füllt die gesamte Form aus, hat ein Hintergrundbild und beinhaltet dann die ganzen gezeichneten Objekte, sowie das ein oder andere Steuerelement. Nur das Flow Panel macht mir Probleme wegen dem transparenten Hintergrund. Würde nur ungern darauf verzichten, weil man das doch irgendwie snchronisieren können muss.


Grüße
 

Shakie

Erfahrenes Mitglied
Habe ein bisschen herumexperimentiert. Wenn du den OptimizedDoubleBuffer-Flag auf true setzt, dann sollte dein Problem gelöst sein. Das kannst du mit der Control.SetStyle-Methode machen. Diese ist aber geschützt, das heißt du musst ein neues Control erstellen, welches von FlowLayoutPanel erbt und dieses dann statt deinem herkömmlichen FlowLayoutPanel verwenden:
Code:
Public Class DoubleBufferedFlowLayoutPanel
    Inherits FlowLayoutPanel
    Public Sub New()
        Me.BackColor = Color.Transparent
        Me.SetStyle(ControlStyles.UserPaint Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer, True)
    End Sub
End Class
 

Kekslaster

Grünschnabel
Hi, bin neu hier in diesem Forum.
Hab lange gesucht wie ich das Flackern in ner Form verhindern kann.
Mit:
Code:
Me.SetStyle(ControlStyles.UserPaint Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer, True)
hat es geklappt
Danke
Gruß Kekslaster