Autor Beitrag
Freefly85
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 29.03.11 15:09 
Hallo


Ich habe in meinem GUI ein Bild eingefügt mit Hilfe einer PictureBox.
Wenn ich jetzt folgende Hilfslinie darüber zeichnen möchte...

ausblenden 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, 31050310440);

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 29.03.11 16:46 
Sorry ich habe nicht den kompletten Code hier reinkopiert.

Aber
ausblenden C#-Quelltext
1:
System.Drawing.Graphics formGraphics;					

initialisiert formGraphics.

Das alles ist in dieser Methode:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
void pictureBox_Paint(object sender, PaintEventArgs e)
{

}


Und dort fügst du dann folgendes ein:
ausblenden C#-Quelltext
1:
2:
3:
4:
using(System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Blue)) // besser als von Hand Dispose() aufzurufen
{
  e.Graphics.DrawLine(myPen, 31050310440);
}


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).

Für diesen Beitrag haben gedankt: Freefly85
Freefly85 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: 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...
ausblenden 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, 0100400100);
   }
}


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.

_________________
>λ=