Autor Beitrag
proggy
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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:
ausblenden volle Höhe C#-Quelltext
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), 2010020200);  //y-Achse
            e.Graphics.DrawLine(new Pen(Color.DarkBlue), 20200120200); //x-Achse
            e.Graphics.DrawString("Strahler 1"new Font("Arial"14),new SolidBrush(Color.Maroon),20,220); 
        }

        private void button1_Click(object sender, EventArgs e)    //Maschine 1 programmieren
        {
            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), 20200, 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
miniC#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Wiin XP Home
C# VS Express 2008
BeitragVerfasst: Mi 24.12.08 14:29 
hi,

user profile iconproggy hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden 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), 20200, 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt

_________________
Zitat MDSN : " ... C# (gesprochen: "si scharp") " :D
proggy Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Fr 26.12.08 12:13 
user profile iconproggy hat folgendes geschrieben Zum zitierten Posting springen:
Aber kann mir jemand für Punkt 1 im Lösungsvorschlag von miniC# ein Beispiel geben?

Bitte sehr, hier ist ein Beispiel:
user profile iconproggy hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private void zeichnen(object sender, PaintEventArgs e)
{
    e.Graphics.DrawLine(new Pen(Color.DarkBlue), 2010020200);  //y-Achse
    e.Graphics.DrawLine(new Pen(Color.DarkBlue), 20200120200); //x-Achse
    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