Arbeiten mit .NET: Materialien/ System.Drawing - Graphics und Pen Objekt

Aus Wikibooks

Das erste, was wir für die Programmierung mit GDI+ benötigen, ist ein neues Projekt (Datei->Neues Projekt). Nennen wir es beispielsweise GDI+_1. Jetzt müssen wir unserem Projekt ein Verweis auf System.Drawing hinzufügen (Projekt->Verweis hinzufügen).

Sobald dies erfolgt ist, fügen wir folgenden Code ganz oben in unserem Projekt ein:
C++-Code:

 using namespace System::Drawing;

C#-Code:

 using System.Drawing;

Visual-Basic-Code:

 Imports System.Drawing

Er bewirkt, dass wir System.Drawing den Befehlen nicht mehr voranstellen müssen.


Das Graphics-Objekt[Bearbeiten]

Um etwas zeichnen zu können, benötigt man als Allererstes eine Instanz (ein Objekt) der Klasse System.Drawing.Graphics. Diese Klasse bietet uns verschiedene Methoden an, um beispielsweise Linien, Kreise oder Rechtecke zu zeichen.

So initialisiert man eine Instanz der Graphics-Klasse.
C++-Code:

 Graphics^ g =this->CreateGraphics();

C#-Code:

 Graphics g = this.CreateGraphics();

Visual-Basic-Code:

 Dim g As Graphics = Me.CreateGraphics()

Am besten, wir packen das ganze in eine Button_Click()-Methode.


Das Pen-Objekt[Bearbeiten]

Das Graphics-Objekt ist vergleichbar mit der menschlichen Hand: Um etwas zu malen, benötigt das Graphics-Objekt, genauso wie die Hand, einen Stift (engl. Pen). Genauso einen Pen wollen wir nun erzeugen.

Wichtige Eigenschaften des Pen-Objektes
Eigenschaft Bedeutung
Color Legt die Farbe fest
Width Legt die Breite fest

So initialisiert man eine Instanz der Pen-Klasse.
C++-Code:

 Pen^ p = gcnew Pen();

C#-Code:

 Pen p = new Pen();

Visual-Basic-Code:

 Dim p As New Pen()


Beispiel[Bearbeiten]

C++-Code:
 Pen^ p = gcnew Pen(Color::Red, 10);	// 1
 Graphics^ g = this.CreateGraphics(); 	// 2
 g->DrawLine(p, 1, 1, 100, 100);	// 3
 g->Dispose();				// 4

C#-Code:

 Pen p = new Pen(Color.Red, 10); 	// 1
 Graphics g = this.CreateGraphics(); 	// 2
 g.DrawLine(p, 1, 1, 100, 100);		// 3
 g.Dispose(); 				// 4

Visual-Basic-Code:

 Dim p As New Pen(Color.Red, 10) 		'1
 Dim g As Graphics = Me.CreateGraphics() 	'2
 g.DrawLine(p, 1, 1, 100, 100)  		'3
 g.Dispose() 					'4


Zu 1: In dieser Zeile erzeugen wir ein neues Pen-Objekt.

Zu 2: In dieser Zeile erzeugen wir ein neues Graphics-Objekt.

Zu 3: Diese Methode des Graphics-Objekt zeichnet eine Linie. Parameter: g.DrawLine(Pen, X-Koordinate des Anfangspunktes, Y-Koordinate des Anfangpunktes, X-Koordinate des Endpunktes, Y-Koordinate des Endpunktes);

Zu 4: Diese Methode gibt nach dem Zeichnen den Speicherplatz des Graphics-Objektes im Arbeitsspeicher wieder frei. Es gehört zum guten Programmierstil, diese Methode immer zu berücksichtigen.

Ergebnis[Bearbeiten]

Das Beispiel erzeugt, wie unten zu sehen, eine rote Linie mit der Breite von 10 Pixeln von der oberen linken Ecken des Formulares aus.

Die Problemlösung[Bearbeiten]

Unser Ergebnis sieht ja eigentlich ganz gut aus, aber verkleinern sie mal das Fenster so weit es geht und vergrößern sie es dann wieder. Merken sie was? Ja genau, der Balken wird abgeschnitten und beim vergrößern nicht wieder neu gezeichnet. Wir wollen uns im Folgenden eine Lösung für das Problem überlegen.

Wir haben unser letztes Projekt in einer ButtonClick()-Methode geschrieben. Das ist aber nicht ganz korrekt. Eigentlich müssen wir alles, was wir an Grafik programmieren in die Paint-Methode des Formulars auf dem die Grafik erscheinen soll einfügen. Wenn sie das entsprechend geändert haben, können sie das Fenster vergrößern und verkleinern und das Bild wird immer neu gezeichnet.