C# :: Aufgabe #221

1 Lösung Lösung noch nicht öffentlich

Zeichenprogramm / Paint für Arme

Anfänger - C# von Exception - 15.07.2018 um 08:17 Uhr
Hallo zusammen,

heute wird ein Grafikprogramm (Windows Forms) erstellt, mit dem man verschiedene geometrische Formen zeichnen kann.
Zunächst genügt es, die Formen "Ellipse", "Rechteck" und "Linie" zu implementieren.

Alle diese Formen haben folgende Gemeinsamkeiten:
- eine Position (Point, linke obere Ecke)
- eine Größe (Size)
- Rahmenfarbe / Linienfarbe (Color)

Das heißt, dass alle Formen drei gemeinsame Eigenschaften haben.

Für die GUI bzw. das Zeichnen auf dem Bildschrim soll in Form1 eine PictureBox angelegt werden - die Leinwand.
Zusätzlich eine ComboBox für die geometrische Form und eine für die Farbe.

Zusätzlich muss jede abgeleitete Klasse eine eigene Implementierung der Methode
Quellcode ausblenden C#-Code
void Draw(Graphics g) { ... }

besitzen (näheres siehe weiter unten).

Klassen:

Erstelle nun folgende Klassen:
- CsGeoForm (Basisklasse)
- CsRectangle, CsEllipse, CsLine (abgeleitete Klasse)

Zum Instanziieren müssen immer alle drei Eigenschaften (Position, Größe, Farbe) den (öffentlichen) Kontstruktoren übergeben werden.

Nachdem alle vier Klassen implementiert wurden wird nun die oben angesprochene Draw Methode implementiert.
Dies ist praktisch ein Zweizeiler.
Es wird zuerst ein Pen angelegt, der die entsprechende Farbe hat.
Anschließend wird die entsprechende Methode aus der Graphics Klasse verwendet.
Und fertig ist die Methode.

Wieder zurück zu Form1:
- Die PictureBox sollte die Eigenschaft BorderStyle auf "Fixed Single" gestellt werden.
- Nun brauchen wir eine Methode "getColor()", diese liefert später anhand der Farbauswahl der ComboBox die entsprechende systemdefinierte Farbe.
- Die Picturebox braucht nun ein Event - MouseClick.

Für die Implementierung des Events "MouseClick":
- zuerst muss geprüft werden, ob die linke oder rechte Maustaste gedrückt wurde.
- Linksklick: Startkoordinaten werden festgelegt.
- Rechtsklick: Höhe und Breite wird festgelegt und anschließend wird eine Instanz dder entsprechenden geometrischen Form erstellt.
Zum Schluss ist die geometrische Form durch einen Aufruf der Draw Methode zu zeichnen.
Hierfür ist ein Graphics-Objekt erforderlich
-> picturebox1.CreateGraphics()
--> Achtung: Muss später wieder mit Dispose() freigegeben werden!

Probleme, die es noch behoben werden müssen:

1)
Sollte das Fenster minimiert werden, so sind alle gezeichneten Rechtecke, etc. weg.
Das darf nicht sein!
Tipp: Weiteres Event -> "Paint"

2)
Evtl ist es während dem Testen bereits aufgefallen: Das Rechteck wird bei negativer Höhe/Breite nicht durch die Methode DrawRectangle gezeichnet!
Das sollte so auch nicht sein...
Tipp: Im Konstruktor von CsRectangle prüfen ob Höhe / Breite kleiner 0 ist.

Nice 2 Have / Erweiterungen:

- Weitere Formen
- ...


Viel Spaß :)

Lösungen:

Die Lösungen sind für Sie noch nicht ersichtlich.
Wenn Sie eine Lösung für diese Aufgabe einreichen und diese freigeschaltet wird, können auch alle anderen Lösungen eingesehen werden.

Ab 3 eingereichte Lösungen sind die Lösungen für alle sichtbar.