Autor |
Beitrag |
proggy
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 24.12.08 12:36
Hallo,
also ich hab da jetzt schon lange dran rumgedoktert, Hilfe!
Ich muss ein Koordinatensystem aufbauen (grafisch). Die Klicks sollen in einem Array gespeichert werden und zu einer Linie verbunden werden. Bin das Ganze jetzt mal so angegangen, aber alles wohl doch nicht so einfach:
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:
| private void Form1_Load(object sender, EventArgs e) { Paint += new PaintEventHandler(zeichnen); } private void zeichnen(object sender, PaintEventArgs e) { e.Graphics.DrawLine(new Pen(Color.DarkBlue), 20, 100, 20, 200); e.Graphics.DrawLine(new Pen(Color.DarkBlue), 20, 200, 120, 200); e.Graphics.DrawString("Strahler 1", new Font("Arial", 14),new SolidBrush(Color.Maroon),20,220); }
private void button1_Click(object sender, EventArgs e) { button1.Text = "Maschine 1 - Programmierung fertig!"; m1programmierungaktiv = 1; } private void m1werteklicken(object sender, PaintEventArgs e) {
}
private void Form1_MouseClick(object sender, MouseEventArgs e) { Graphics gr = this.CreateGraphics(); if (m1programmierungaktiv == 1) { if (MousePosition.X < 121 && MousePosition.Y < 201) { m1wertex[anzwerte] = MousePosition.X; m1wertey[anzwerte] = MousePosition.Y; if (anzwerte == 0) { gr.DrawLine(new Pen(Color.Red), 20, 200, m1wertex[0], m1wertey[0]); } else{gr.DrawLine(new Pen(Color.Red), m1wertex[anzwerte-1], m1wertey[anzwerte-1], m1wertex[anzwerte], m1wertey[anzwerte]); } anzwerte++; } } gr.Dispose(); } |
nach dem ersten Klick in das Koordinatensystem soll eine Linie zum Punkt 0/0 gezeichnet werden, danach von Punkt 2 zu Punkt 1 usw.
Aber: erst wenn ich das Anwendungsfenster auf Vollbild schalte, nimmt er die Klicks richtig an. Und die y-Koordinaten sind auch irgendwie versetzt.
Und: Wo kann ich die Referenz auf gr hineinschreiben, damit diese überall bekannt ist.
Fragen über Fragen, ich weiss.
Danke für Eure Hilfe(n)
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
|
|
miniC#
Beiträge: 75
Wiin XP Home
C# VS Express 2008
|
Verfasst: Mi 24.12.08 14:29
hi,
proggy hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private void Form1_MouseClick(object sender, MouseEventArgs e) { Graphics gr = this.CreateGraphics(); if (m1programmierungaktiv == 1) { if (MousePosition.X < 121 && MousePosition.Y < 201) { m1wertex[anzwerte] = MousePosition.X; m1wertey[anzwerte] = MousePosition.Y; if (anzwerte == 0) { gr.DrawLine(new Pen(Color.Red), 20, 200, m1wertex[0], m1wertey[0]); } else{gr.DrawLine(new Pen(Color.Red), m1wertex[anzwerte-1], m1wertey[anzwerte-1], m1wertex[anzwerte], m1wertey[anzwerte]); } anzwerte++; } } gr.Dispose(); } | |
1. this.CreateGraphics nix gut. nutze lieber das paintevent.
2. du verwendest MousePosition, das sind die bildschirmkoordinaten. verwende das MouseEventArgs e für deine lokalen koordinaten.
3. bei größeren zeichenaktionen ist es sinnvoll das zeichnen in eine methode auszulagern.
Moderiert von Christian S.: Code- durch C#-Tags ersetzt
_________________ Zitat MDSN : " ... C# (gesprochen: "si scharp") "
|
|
proggy
Hält's aus hier
Beiträge: 14
|
Verfasst: Do 25.12.08 19:26
Okay, also das mit dem Zeichnen hab ich jetzt in eine Paint-Methode ausgelagert. Aber kann mir jemand für Punkt 1 im Lösungsvorschlag von miniC# ein Beispiel geben?
|
|
JüTho
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 26.12.08 12:13
proggy hat folgendes geschrieben : | Aber kann mir jemand für Punkt 1 im Lösungsvorschlag von miniC# ein Beispiel geben? |
Bitte sehr, hier ist ein Beispiel:
proggy hat folgendes geschrieben : | C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| private void zeichnen(object sender, PaintEventArgs e) { e.Graphics.DrawLine(new Pen(Color.DarkBlue), 20, 100, 20, 200); e.Graphics.DrawLine(new Pen(Color.DarkBlue), 20, 200, 120, 200); e.Graphics.DrawString("Strahler 1", new Font("Arial", 14), new SolidBrush(Color.Maroon),20,220); } | |
In der SDK-Doku/MSDN gibt es, z.B. zur PaintEventArgs-Klasse, ebenfalls Beispiele. (Warum wundere ich mich eigentlich noch, dass dort nicht nachgeschaut wird?)
Gruß und Frohe (Rest-) Weihnachten! Jürgen
|
|
|