2017-01-16 3 views
-1

Ich bin mir nicht sicher, ob ich das richtig mache. Was ich brauche ist, nachdem der Benutzer alle ihre Linien erstellt hat, könnte 1 sein könnte 10. Ich kann die Länge dieser Linien berechnen, nehmen Sie die Zone, in der Zeile erschien in und fügen Sie es zu einer Liste hinzu.Liste aus mehreren Listen erstellen?

Also am Ende haben Sie zum Beispiel

Length Location 
2  1 
4  2 
3  1 
8  1 

Danach werde ich diese Daten in ihren jeweiligen Spalten auf dem Oracle-Server hinzufügen. Ist eine Liste angemessen? Ich bekomme einen Out-of-bounds-Fehler auf Zone1 und distfinal. Wenn ich nur eine Zeile zu tun, dann bekomme ich eine Länge berechnet, sondern eine aus gebundenen Fehler auf Zone1

List<string> Zone1 = new List<string>(); 

     private Point p1, p2; 
     List<Point> p1List = new List<Point>(); 
     List<Point> p2List = new List<Point>(); 

Dictionary<string, int> Void = new Dictionary<string, int>(); 
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button.Equals(MouseButtons.Left)) 
      { 
       if (p1.X == 0) 
       { 
        p1.X = e.X; 
        p1.Y = e.Y; 

        var color = zoneMap1.GetPixel(e.X, e.Y); 
        if (color == Color.FromArgb(0, 0, 255)) 
        { 
         //MessageBox.Show("Zone 1"); 
         Zone1.Add("1"); 
        } 
        else if (color == Color.FromArgb(0, 255, 0)) 
        { 
         //MessageBox.Show("Zone 2"); 
         Zone1.Add("2"); 
        } 
       } 
       else 
       { 
        p2.X = e.X; 
        p2.Y = e.Y; 

        p1List.Add(p1); 
        p2List.Add(p2);  

        Invalidate(); 
        pictureBox1.Refresh(); 
        p1.X = 0; 
       } 
      } 
     } 


     private void pictureBox1_Paint(object sender, PaintEventArgs e) 
     { 
      using (var p = new Pen(Color.Red, 5)) 
      { 
       for (int x = 0; x < p1List.Count; x++) 
       { 
        e.Graphics.DrawLine(p, p1List[x], p2List[x]); 
       } 
      } 
     } 

Mit dem, was ich hier habe, vorausgesetzt, ich darüber richtig werde, treten die Fehler mit Void.Add(Zone1[i], distfinal);

Letztendlich möchte ich einfach alle Zeilen erstellen. Dann benutze die untere Schaltfläche, um das Beispiel zu erstellen, das ich oben angegeben habe. Nun

private void btnCalc_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < p1List.Count; i++) 
    { 
     if (p1List.Count != 0 && p2List.Count != 0) 
     { 
      dist = (Convert.ToInt32(Math.Pow(p1.X - p1.Y, 2) + Math.Pow(p2.X - p2.Y, 2))); 
      int distfinal = (dist % 32); 
      Void.Add(Zone1[i], distfinal); 
     } 
     else 
     { 
      MessageBox.Show("You must first create a line"); 
     } 
    } 
} 
+2

Wo treten Ihre Fehler auf? – krillgar

+1

Sind Sie sicher, dass 'Zone1' die gleiche Anzahl an Elementen wie' p1List' hat? – juharr

+0

Es sei denn mein Code ist falsch. Ich bin mir nicht sicher, ob ich das besser machen könnte. Gerade jetzt erstellt der erste Klick x und fügt die Zone hinzu, in der er erstellt wurde. Dann erzeugt der zweite Klick y und die Linie. Dann der 2. und so weiter. Ich möchte die Zeile zuerst erstellt haben, dann schaue, in welcher Zone sie erstellt wurde, füge sie hinzu und gehe zur nächsten Zeile, die du erstellt hast, aber ich weiß nicht, wie ich das machen soll. – Lee

Antwort

1

lernte Tuple :)

Dieses es fixiert.

var list = new List<Tuple<string, int>>(); 
list.Add(new Tuple<string, int>(Zone1[i], distfinal)); 
Verwandte Themen