Entwickler-Ecke
WinForms - pictureBox im Hintergrund
Freefly85 - Di 29.03.11 15:09
Titel: pictureBox im Hintergrund
Hallo
Ich habe in meinem GUI ein Bild eingefügt mit Hilfe einer PictureBox.
Wenn ich jetzt folgende Hilfslinie darüber zeichnen möchte...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Blue); System.Drawing.Graphics formGraphics;
formGraphics.DrawLine(myPen, 310, 50, 310, 440);
myPen.Dispose(); formGraphics.Dispose(); |
...bleibt das Bild im Vordergrund und die Linie ist nicht sichtbar.
Wie ändere ich das? Wo finde ich diese Einstellungen?
Danke und Gruss
Kevin
Th69 - Di 29.03.11 16:35
Hallo,
dein bisheriger Code dürfte gar nicht compilieren, denn 'formGraphics' ist bei dir uninitialisiert.
In welchem Ereignis hast du denn überhaupt diesen Code stehen? Richtig wäre das Paint-Ereignis der PictureBox.
Freefly85 - Di 29.03.11 16:46
Sorry ich habe nicht den kompletten Code hier reinkopiert.
Aber
C#-Quelltext
1:
| System.Drawing.Graphics formGraphics; |
initialisiert formGraphics.
Das alles ist in dieser Methode:
C#-Quelltext
1: 2:
| protected override void OnPaint(PaintEventArgs e) { } |
Wenn ich die Linie (myPen) wie Du schriebst im Paint-Ereignis der PictureBox zeichnen soll...muss ich dann um das Ereignis zu erstellen Doppelklick auf die PictureBox, sprich auf das Bild im GUI, machen? Sorry verstehe nicht ganz was Du meinst.
Danke schonmal!
Th69 - Di 29.03.11 17:09
Hi,
mit uninitialisiert meine ich, daß die Variable so ja einfach den Wert 'null' hat (bzw. der Compiler dies eben als Fehler wertet).
Und um ein Ereignis per Designer zu abonnieren, einfach die PictureBox selektieren (also nur Einfachklick), dann im Eigenschaften-Fenster auf den "gelben Blitz" (Ereignisse) klicken und dort dann bei "Paint" einen Doppelklick machen.
Nun erzeugt dir der Designer dann die Vorlage für das Paint-Ereignis:
C#-Quelltext
1: 2: 3: 4:
| void pictureBox_Paint(object sender, PaintEventArgs e) {
} |
Und dort fügst du dann folgendes ein:
C#-Quelltext
1: 2: 3: 4:
| using(System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Blue)) { e.Graphics.DrawLine(myPen, 310, 50, 310, 440); } |
P.S. Du mußt in der PictureBox malen und nicht im Form-Fenster, weil die Linie sonst ja hinter deiner PictureBox gezeichnet werden würde.
Noch ein P.S. Ein Doppelklick im Designer direkt auf einem Control aktiviert jeweils nur das Standard-Ereignis (welches das nun bei einer PictureBox ist, weiß ich aus dem Kopf aber nicht, könnte sogar das Paint-Ereignis sein - meistens ist es eher das Click oder z.B. TextChanged-Ereignis).
Freefly85 - Mi 30.03.11 11:01
Hallo Th69
Perfekt, das funktioniert super. Vielen Dank für Deine Hilfe!
Eine letzte Frage bleibt aber noch offen:
Ich habe nun wie Du vorgeschlagen hast die Linie wie folgt implementiert...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void pictureBox1_Paint(object sender, PaintEventArgs e) { using (System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Blue)) { e.Graphics.DrawLine(myPen, 0, 100, 400, 100); } } |
Während das GUI geöffnet ist, verändere ich die x1,y1,x2,y2 Werte der Linie (myPen)extern über einen anderen Event (NumericUpDown_ValueChanged). Wurde hier die Linie (myPen) gezeichnet, lässt sie sich nicht mehr verändern, richtig?
Oder sehe ich das falsch? Wenn nicht, was müsste ich anpassen?
Das Ziel wäre, die Position der Linie immer wieder zu aktualisieren (je nach eingegebenen Werten von den verschiedenen NumericUpDown's).
Kha - Mi 30.03.11 12:21
Die Linie existiert in diesem Sinne gar nicht - nachdem GDI sie gezeichnet hat, ist sie schon wieder vergessen. Du kannst also ruhig mit pictureBox.Invalidate() ein Repaint auslösen und in diesem eine ganz andere Linie zeichnen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!