| Autor | 
Beitrag | 
 
proggy 
Hält's aus hier
 
Beiträge: 14 
 
 
 
 | 
Verfasst: Mi 24.12.08 11: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 13: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 18: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 11: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  
 
 | 
 
 |  
 
 
 |