2017-01-16 5 views
-1

Я не уверен, что я прав. Мне нужно, чтобы после того, как пользователь создал все свои строки, может быть 1 может быть 10. Я могу рассчитать длину этих строк, взять зону, в которой появилась строка, и добавить ее в список.Создание списка из нескольких списков?

Так что в конце концов у вас есть, например

Length Location 
2  1 
4  2 
3  1 
8  1 

После этого я буду добавлять эти данные в соответствующих столбцах на сервере оракула. Является ли список подходящим? В настоящее время я получаю ошибку за пределами зоны Zone1 и distfinal. Если бы я только сделать одну линию, то я получаю длину известково, но об отсутствии связанной ошибки на 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]); 
       } 
      } 
     } 

с тем, что я здесь, предполагая, что я буду об этом правильно, возникают ошибки с Void.Add(Zone1[i], distfinal);

В конечном счете, я хотел бы просто создать все линии. Затем используйте кнопку ниже, чтобы создать пример, который я дал в верхней части.

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

Где ваши ошибки происходят? – krillgar

+1

Вы уверены, что 'Zone1' имеет такое же количество элементов, как' p1List'? – juharr

+0

Если мой код не так. Я не уверен в лучшем способе сделать это. Прямо сейчас первый клик создал x и добавляет зону, в которой он был создан. Затем второй щелчок создает y и строку. Затем 2-й и т. Д. Я хотел бы сначала создать линию, а затем посмотреть, в какой зоне она была создана, добавить ее и перейти к следующей строке, которую вы создаете, но я не знаю, как это сделать. – Lee

ответ

1

Ну, узнал Tuple :)

Это зафиксировал его.

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