C# Rectangle auf Form zeichnen (Windows Forms)
-
Hallo Zusammen!
Ich habe grade ein c# Projekt als Windows Forms Application angefangen. Ich hatte vor ein Schachbrettmuster auf das Form zu zeichnen (aus Rectangles) und stehe nun vor dem Problem das ich nicht weiß wie ich ein Rechteck auf das Form zeichnen kann.
mein Code:
List<Rectangle> rects; private void InitializeField() { rects = new List<Rectangle>(); [...] //Liste wird mit den Rechtecken gefüllt die gemalt werden sollen Color col = Color.Black; foreach(Rectangle r in rects) { DrawRect(r, col); } Invalidate(); } private void DrawRect(Rectangle rect, Color col) { System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(col); Pen pen = new Pen(col); System.Drawing.Graphics graphics = CreateGraphics(); graphics.DrawRectangle(pen, rect); graphics.FillRectangle(myBrush, rect); graphics.Dispose(); pen.Dispose(); myBrush.Dispose(); }
Das Problem ist das es einfach nicht sichtbar ist auf dem Form.
Was hab ich falsch gemacht, oder hab ich was vergessen?! Oder gibt es eine andere Möglichkeit auf ein Form zu malen?Vielen Dank schonmal!
-
WinForms arbeitet ereignisorientiert, d.h. du mußt im Paint-Ereignis der Form zeichnen, s. [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)
P.S: anstatt manuellem Dispose sollte man besser die using-Anweisung verwenden (nicht zu verwechseln mit der using-Direktive):
using (Pen pen = new Pen(col)) { // ... }
-
Das Problem was ich hatte als ich das im Paint gezeichnet habe, hat das Form so geflackert weil das anscheinend so oft neu gezeichnet wurde...
-
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Color col = Color.Black; foreach (Rectangle r in rects) { DrawRect(r, col); } }
-
Benutze aber e.Graphics anstatt CreateGraphics im Paint-Handler.
-
Perfekt! Danke!