1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
14
14
ZUGRIFFE
502
502
EMPFEHLEN
-
Hi!
Ich hab beim Suchen nur gefunden wie ich eine Linie zeichnen kann.
Mein Problem ist nun aber das ich gerne auf jede gezeichnete Linie und am besten auch auf die Eckpunkte zugreifen können möchte.
Ich will also auf die Linie klicken können und zB die Farbe verändern. Oder auch vorhandene Linien verschieben können.
Ich denke dabei an das Line-Steuerelement bei Visual Basic 6.0.
Wie stell ich das am besten an?
Danke!
-
01.07.07 15:33 #2
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Kommt drauf an was das Ziel sein soll. Wenn du das einfach nur benutzen willst, um eine Linie darzustellen, könntest du dir ein eigenes Steuerelement schreiben, welches die benötigte Linie darstellt.Wie stell ich das am besten an?
Wenns nur horizontal / vertikal sein soll, ohne irgendwelche Extras (diagonal.. runde Ecken bei dickeren Linien..) könntest ein Panel missbrauchen. Das wäre für dich am wenigsten Aufwand. *G*
lg, AlexWith the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Danke für die schnelle Antwort

Also um Grunde könnte ich sogar drauf verzichten, dass man die Linien bewegen kann. Mir reicht es, dass man auf eine Linie klicken kann und sie dann eine andere Farbe bekommt. Achso ja und ich will auch diagonale Linien.
Die einzige Möglichkeit die mir einfällt ist, dass man die Koordinaten von der Form nimmt und immer überprüft ob der Klick auf Linie liegt. Aber dann müsste ich ja für jede Linie eine Funktion aufstellen oder? Das muss doch leichter gehen!?
-
01.07.07 15:47 #4
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Für jede Linie eine eigene Funktion ist nicht gnaz richtig. Einfach im MouseUp Event die Koordinaten prüfen. Die Daten deiner Linien müsstest dann halt speichern.. und bei Bedarf anpassen.
Das ganze solltest dann aber wirklich in ein eigenes Control auslagern. Damit du erstens ohne Probleme mehrere Linien darstellen kannst, ohne das sich der Code in deiner Form vermehrt,..With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Mh sorry das ist mir irgendwie nicht ganz klar.
Nehmen wir mal nur eine Linie.. dann müsste ich es doch (wie in der Schule
) machen, dass ich den Punkt in die Funktion einsetzt und wenn eine wahre Aussage rauskommt liegt er auf der Geraden. Oder wie könnt das einfacher machen?
Und wenn ich dann mehere linien habe muss ich dann doch mehere Funktionen aufstellen und alle einzeln testen?
Also anders kann ich mir das gerade nich vorstellen vielleicht kannst du mir gerade mal auf die Sprünge helfen
.
Und wie genau erstellt man Steuerelemente? Muss ich da auf was achten? Und muss da später was mit der exe mitgeliefert werden oder wird das dann reinkompiliert?
-
01.07.07 16:12 #6
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Mit dem GraphicsPath könntest dir die Rechnerei sparen..
Das mal zur Vereinfachung.. (IsVisible bzw. IsOutlineVisible)
Zum Control: Ist ja auch nur eine Klasse, die wird mit den anderen in dein Assembly reinkompiliert.
Hier 2 vielleicht Hilfreiche Links:
MSDN - Zeichnen und Ausgeben von benutzerdefinierten Steuerelementen
C# OpenBook - 25.4 Ein eigenes Steuerelement entwerfen
With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Super ich danke dir, dann werd ich mir das alles mal durchlesen
-
Mh ich hab jetzt mal das hier (http://msdn2.microsoft.com/de-de/lib...dt(VS.80).aspx) ausprobiert. Da ich nicht wusste wie man das nun verwendet habe ich den Inhalt einfach in Form_Paint kopiert.
Das ist aber blöd. Ich würde gerne, dass es beim Klick auf einen Button erstellt wird.
Außerdem muss ich ja den GraphicsPath() überalle verwenden können (zB in Form1_MouseDoubleClick).
Irgendwie steig ich da nicht so ganz durch
-
01.07.07 17:58 #9
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Ist jetzt nur ein ganz einfaches, nicht schönes Beispiel wie du das machen könntest, und ich hab jetzt auch nicht die Syntax und dergleichen geprüft.
Es wird ein Button angenommen, bei dessen Betätigung ein neues zu zeichnendes Objekt erstellt wird. Die Infos zum Zeichnen werden in einem GraphicsPath gespeichert, und diese werden in einem Dictionary gemeinsam mit dem zu verwendenden Stift gesammelt.
Bei jedem MouseUp werden die Pfade überprüft, und wenn einer "getroffen" wurde, wird dessen Stift "geändert".
Nur kurz schnell runtergeschrieben.. Syntaxfehler vorbehalten.
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
using System.Collections.Generic; using System.Drawing.Drawing2D; using System.Drawing; public class Form1 : Form { // ... private int colorCount = 0; public int ColorCount // immer ne andere farbe.. bei jedem aufruf wird hochgezählt.. obere grenze: 255 { get { ++colorCount > 255 ? return 0 : return colorCount; } } private Dictionary<GraphicsPath, Pen> drawings = new Dictionary<GraphicsPath, Pen>(); private Pen drawingPen = Pens.Black; private void NewDrawingButton_OnClick(object sender, EventArgs ea) { GraphicsPath gp = new GraphicsPath(); gp.AddLine(...); int color = ColorCount; drawings.Add(gp, new Pen(Color.FromArgb(color, color, color))); this.Invalidate(); } protected override void OnPaint(object sender, PaintEventArgs ea) { foreach (GraphicsPath gp in drawings.Keys) { ea.Graphics.DrawPath(drawings[gp], gp); } } private void Form1_MouseUp(object sender, MouseEventArgs mea) { foreach (GraphicsPath path in drawings.Keys) { Pen pen = drawings[path]; if (path.IsOutlineVisible(mea.X, mea.Y, pen)) { // neue farbe setzen .... pen.Dispose(); pen = null; int color = ColorCount; pen = new Pen(Color.FromArgb(color, color, color)); drawings[path] = pen; Invalidate(); return; } } } }
With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Ach verdammt ich find C# irgendwie nicht logisch

Vielen Dank auf jeden Fall ich werd das mal außprobieren und mich dann bestimmt nochmal melden.
Wofür ist eigentlich diese Zeile:
Code csharp:1
private Dictionary<GraphicsPath, Pen> drawings = new Dictionary<GraphicsPath, Pen>();
-
01.07.07 18:38 #11
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Warum ist C# nicht logisch? Was verwirrt dich so sehr?
Code csharp:1
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)With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
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
Geändert von kuhlmaehn (01.07.07 um 19:05 Uhr)
-
01.07.07 19:11 #13
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
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.
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)Einmal les ich zB Irgendwas() bla = new Irgendwas()
Wirst wohl noch nicht gekannt haben...
7.4 Generics – Generische Datentypen
Da kannst dich ein wenig einlesen wenn du magst.
Ein paar Grundlagen solltest schon können.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.
"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.
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...)Einmal les ich zB Irgendwas() bla = new Irgendwas(), dann war es ein anderes mal nur blu = new IrgendwAnderes().
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
Funktioniert ja ähnlich, nur laufen manche Sachen halt nicht so einfach...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
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.. )
Code csharp:1
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..
With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
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
-
01.07.07 23:21 #15
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
Ähnliche Themen
-
Bestimmte User sollen nur auf bestimmte Verzeichnisse zugreifen können
Von uwe75-1 im Forum PHPAntworten: 5Letzter Beitrag: 21.06.09, 10:06 -
Namensraum ablegen und woanderes drauf zugreifen können...
Von viossi im Forum .NET CaféAntworten: 5Letzter Beitrag: 24.05.08, 11:23 -
Wie können 2 Programme kommunzieren?
Von ProgFreak im Forum C/C++Antworten: 12Letzter Beitrag: 12.05.04, 14:08 -
Können wir das überbieten!
Von RedZack im Forum SmalltalkAntworten: 10Letzter Beitrag: 14.02.02, 18:37





Zitieren


Login





