Auf Linie zugreifen können

Alexander Schuc

crazy-weasel
Warum ist C# nicht logisch? Was verwirrt dich so sehr?

C#:
private Dictionary<GraphicsPath, Pen> drawings = new Dictionary<GraphicsPath, Pen>();

Erzeugt ein neues generisches Dictionary mit Schlüsseln vom Typ GraphicsPath und die Werte sind vom Typ Pen.

(Geht aber .net 2.0 bzw. C# 2.0)
 

kuhlmaehn

Erfahrenes Mitglied
Und wofür brauch ich das Dictonary?

Weiss nich genau es sind immer so Kleinigkeiten :)
Einmal les ich zB Irgendwas() bla = new Irgendwas(), dann war es ein anderes mal nur blu = new IrgendwAnderes(). Naja also im großen und ganzen ist es schon ok und macht auch Spaß nur oft les ich halt in der msdn nach und probier das dann anzuwenden und es klappt nie weil ich immer irgendwas nicht richtigmache.
Bei Visual Basic 6 (nagut das zählt nicht ^^) oder php war irgendwie immer alles selbsterklärender bzw. so, dass man es anhand von Dokumentationenen alleine hinbekommen hat.
Aber warscheinlich fehlt mir einfach noch der richtige Durchblick, bin ja noch nich lange dabei =)

[Edit]
Oder nochmal zu deinem Beispiel..
Eine Linie zu zeichnen stell ich mir irgendwie eher so vor:
PaintLine(x1,y1,y1,y2,farbe,objekt auf dem gezeichnet werden soll)
Und gut ist ^^ naja manchmal ist es halt nicht so leicht wie man gerne hätte :S
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Wennst dir den Code ansiehst, wirst vielleicht sehen, dass ich da immer einen GraphicsPath gemeinsam mit einer Pen reinspeichere.

So gibts im Beispiel eine Zuordnung von GraphicsPath (der Linie z.b.) und einem Stift (Farbe, Breite..) mit welcher der Pfad gezeichnet wird.

Einmal les ich zB Irgendwas() bla = new Irgendwas()

Wo hast du "vorne" runde Klammern gesehen? In meinem Beispiel hab ich "Generics" benutzt. Damit programmiert es sich einfach leichter. (Und ist ja auch schneller)
Wirst wohl noch nicht gekannt haben...

7.4 Generics – Generische Datentypen

Da kannst dich ein wenig einlesen wenn du magst.

Bei Visual Basic 6 (nagut das zählt nicht ) oder php war irgendwie immer alles selbsterklärender bzw. so, dass man es anhand von Dokumentationenen alleine hinbekommen hat.

Ein paar Grundlagen solltest schon können.

"new" erzeugt ein neues Objekt. (Konstruktor aufruf, etc.) Das Objekt wird (meistens) einer Variable zugewiesen. Diese muss vom selben (oder einem kompatiblen, siehe Vererbung) Typ sein.

Einmal les ich zB Irgendwas() bla = new Irgendwas(), dann war es ein anderes mal nur blu = new IrgendwAnderes().

Im Falle von "bla" ists eine neue (lokale) Variable die noch nicht definiert wurde. (Klammern passen am Anfang halt nicht), bei "blu" wird einer bereits vorhandenen Variable ein neues Objekt zugewiesen. Deswegen fehlt der Typ vorm Variablennamen, bzw. wird nicht mehr benutzt.. (sosnt wäre es eine neue Variable...)

Klarer?

Schau dir vielleicht das OpenBook ein wenig an, hast eh schon ein paar Links von mir dorthin bekommen. Fragen darfst natürlich auch..


Edit:

Mhm.. da macht man sich die Mühe und schreibt, und dann editiert der Kerl noch was rein.. ;D

Oder nochmal zu deinem Beispiel..
Eine Linie zu zeichnen stell ich mir irgendwie eher so vor:
PaintLine(x1,y1,y1,y2,farbe,objekt auf dem gezeichnet werden soll)
Und gut ist naja manchmal ist es halt nicht so leicht wie man gerne hätte :S

Funktioniert ja ähnlich, nur laufen manche Sachen halt nicht so einfach...

Du kannst ja einfach im Paint-Event eine Linie zeichnen. Die passenden Methoden stellt dir die Graphics-Klasse bereit.

Das Objekt auf dem gezeichnet werden soll, hast durch das Event schon festgelegt. (Je nachdem von welchem Objekt du das Paint-Event abonnierst..)

Die Farbe ist durch das Pen oder durch die verschiedenen Brush klassen definiert. (Pen bei "Draw" Methoden, Brushes bei "Fill" Methoden - Hat den Grund: Füllen kann man auch mit Mustern etc. da braucht man bissl mehr Infos als ein Stift hergibt.. )

C#:
pea.Graphics.DrawLine(Pens.Black, x1, y1, x2, y2);

So würde das ganze aussehen..

Warums keine PaintLine-Methode gibt? Paint sagt erstens nicht viel über die Art wie gezeichnet werden soll aus. Draw/Fill ist da genauer.. :)
Warum diese Methoden nicht global existieren?
Im Sinne von OOP ist das Erstens nicht schön, ausserdem kann man bei den Zeichen routinen noch einiges festlegen, das geschieht alles über das Graphics-Objekt. Alles schön gekapselt.. :)

Würd sagen, du solltest dir wirklich ein wenig Lektüre zu gemüte führen, und ein bissl verständnis Aufbauen.. :)
 

kuhlmaehn

Erfahrenes Mitglied
Super ich danke dir! :)
Ja du hast absoulut recht, ich werd mir das Buch jetzt mal angucken bin noch nicht dazu gekommen. Hoffentlich baut sich dann langsam ein gewisses Grundverständis auf. =)
Und sorry fürs Edit =D