Ellipse zeichnen im LAbel funktioniert nicht
-
Ich versuche gegenwärtig eine Ampelfunktion abhängig von bestimmten Zuständen zu programmieren. Zum Testen habe ich erstmal einfach eine If-Abfrage programmiert, damit ich sehen kann, wie der KReis aussieht, aber er zeichnet nichts auf dem Label. Das LAbel beinhaltet ein Ampel-Bild. Sieht man vielleicht nichts, weil man auf Ebenen achten muss?
private void lbTestCondition_Load(object sender, EventArgs e) { int x = 5; if (x ==5) { Graphics graph = this.CreateGraphics(); Pen penCurrent = new Pen(Color.Red); graph.DrawEllipse(penCurrent, new Rectangle(25, 25, 5, 5)); }
-
Zeichne nur in Paint-Eventhandlern und sonst nirgends.
Also, label.Paint abonnieren und in das Graphics-Objekt im Parameter zeichnen.
-
OK, dann habe ich jetzt im Form_Load diesen Eventhandler erstellt:
this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
und die Methode dazu lautet:
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { int x = 10; int y = 10; Graphics graph = lbGraph.CreateGraphics(); Pen penCurrent = new Pen(Color.Red); graph.DrawEllipse(penCurrent, new Rectangle(25, 25, x, y)); graph.FillEllipse(penCurrent, new Rectangle(25, 25, x, y)); }
Meinst du so?
-
Ok, habe es jetzt hinbekommen.
Habe nun aber das Problem, dass er mir die drei Ellipsen zeichnet:private void Form1_PaintRed(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics graph = lbGraph.CreateGraphics(); SolidBrush redbrush = new SolidBrush(Color.Red); graph.FillEllipse(redbrush, new Rectangle(58, 33, 65, 65)); } private void Form1_PaintYellow(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics graph = lbGraph.CreateGraphics(); SolidBrush yellowbrush = new SolidBrush(Color.Yellow); graph.FillEllipse(yellowbrush, new Rectangle(58, 123, 65, 65)); } private void Form1_PaintGreen(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics graph = lbGraph.CreateGraphics(); SolidBrush greenbrush = new SolidBrush(Color.Green); graph.FillEllipse(greenbrush, new Rectangle(58, 130, 65, 65)); }
Jedoch den gelben Kreis unten abschneidet und den grünen garnicht anzeigt.
Die Handler funktionieren aber und die KReise auch, weil wenn ich die rectangle höher setze funktionierts ohne Probleme. Wie kann das passieren?
-
Habe gerade festgestellt, dass das zeichenen der Ellipse abhängig von der Position des parentforms ist, wie kann das sein? Die Rectangle bezieht sich doch nur aufs Label selber oder nicht?
-
-
Du musst/sollst nicht mit CreateGraphics arbeiten. e.Graphics steht dir im Handler zur verfügung!
-
Wenn Du in das label zeichnen willst, dann abonniere label.Paint und nicht form.Paint.
Lies Dich bitte in das Thema ein.
-
-
Also in das Thema lese ich mich gerade ein. Habe hier das Buch C# in 21 Tagen vorliegen mit der Übung "Kreise zeichnen" und wollte anhand dessen eine kleine Übung starten, aber das mit e.graphics hatte nicht funktioniert, weshalb ich das ganze Netz nach Beiträgen durchforstet habe, aber da findet man nichts mit in andere Label reinzeichnen in c#
Normales zeichnen war ja kein Problem.
Mein Problem ist wohl, dass ich mit der Aussage abonnieren nichts verbinden kann, also, was das genau bedeutet..Ist das denn so gemeint:
private void lbGraph_PaintGreen(object sender, System.Windows.Forms.PaintEventArgs e) { SolidBrush greenbrush = new SolidBrush(Color.Green); e.Graphics.FillEllipse(greenbrush, new Rectangle(58, 130, 65, 65)); }
-
Ein Event abonnieren heißt einfach nur einen Handler dafür zu registrieren:
this.label1.Paint += new System.Windows.Forms.PaintEventHandler(this.label1_Paint);
Dann malt Dir folgender Code einen kleinen, grünen Greis links oben auf das Label:
private void label1_Paint(object sender, PaintEventArgs e) { SolidBrush greenbrush = new SolidBrush(Color.Green); e.Graphics.FillEllipse(greenbrush, new Rectangle(0,0,10,10)); }
Die Koordinaten sind relativ zum label.
-
OK, danke. Das hat funktioniert. Jetzt läuft das Programm genau nach meinem Wunsch