Hallo,
ich habe vor einiger Zeit mal hier von einem User ein Snippet für einen Farbverlauf (WinForms) gesehen, den ich jetzt benutzen wollte.
if ((ClientSize.Width == 0) || (ClientSize.Height == 0)) return;
Color farbe1 = new Color();
Color farbe2 = new Color();
farbe1 = Color.FromArgb(227, 239, 255);
farbe2 = Color.FromArgb(175, 210, 255);
LinearGradientBrush linearBrush = new LinearGradientBrush(new Point(300, 0),
new Point(300, ClientSize.Height), farbe1, farbe2);
e.Graphics.FillRectangle(linearBrush, 0, 0, ClientSize.Width, ClientSize.Height);
Diesen Snippet habe ich also ins Paint-Event der Form eingefügt, was auch wunderbar klappt. Nur mein Problem ist jetzt, wenn ich die Form größer und kleiner ziehe, sieht man auf der Form so Rechtecke, als wenn er immer wieder die Form überzeichnet oder so ähnlich!?
Habt ihr ne Idee, wie man diesen Effekt vermeiden kann bzw. wie er den Farbverlauf ganz normal anpasst, wenn die Größe der Form ändert zur Laufzeit?
Vielen Dank!
Gruß
DellaRocco
Du musst im Konstruktor des abgeleiteten Controls mit SetStyle die Option ResizeRedraw auf true stellen oder aber im abonnierten Resize Event ein Invalidate auf die gesamte Zeichenfläche ausführen.
Danke für deine Antwort, es klappt auch soweit!
Nur wenn ich es nun größer oder kleiner ziehe, flackert die Oberfläsche doch extrem stark. Durch das Setzen von "this.DoubleBuffered = true;" flackert es zwar nicht mehr ganz so schlimm, aber sehen tut man es leider immer noch.
Gruß
DellaRocco
Ja, das wirst du in GDI+ auch nicht wirklich abstellen können, da du wegen dem Farbverlauf die komplette Zeichenfläche neu zeichnen musst (Farbverlauf verschiebt sich ja...). Alternativ kannst du während des Resize vorgangs die Hintergrundfarbe auf eine solide Farbe ohne Verlauf stellen und nach dem Resize den Farbverlauf wieder setzen. Das erfordert ein wenig Code, ist aber gut machbar.
Ansonsten musst du auf WPF ausweichen, um das flüssig hinzubekommen.
Ich prüfe jede Sekunde ob ein Resize stattgefunden hat und wenn ja wird der gesamte Verlauf neu gezeichnet.
So geht Resize schnell und flüssig und das Form sieht dann nach einer Sekunde gut aus.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Wie machst du das genau, wenn ich fragen darf?
Gruß
DellaRocco
Dann verwende besser ein Delay, den du beim Resize startest und immer wieder neu resettest und wenn der einmal doch abläuft, machst du ein invalidate. Das ist bei weitem ressourcenschonender als ein Timer der jede sekunde auf eine änderung prüft.
Dann verwende besser ein Delay, den du beim Resize startest und immer wieder neu resettest und wenn der einmal doch abläuft, machst du ein invalidate. Das ist bei weitem ressourcenschonender als ein Timer der jede sekunde auf eine änderung prüft.
Könntest du mir vielleicht einmal zeigen, wie du das genau meinst?
Gruß
DellaRocco
Etwas Eigeninitative erwarten wir schon. Du hast jetzt ja alle Stichworte, die du brauchst.