2010-01-07 3 views
0

Я пытаюсь заполнить контейнер любым количеством элементов управления с одинаковой высотой и шириной. Я разрешаю этому контейнеру быть сжатым или выращенным пользователем, и контейнер будет организовывать элементы управления, чтобы он соответствовал большинству элементов управления на одной строке, насколько это возможно. Вот код, чтобы организовать его:Ошибка Windows Forms Top

 int row = 0; 
     int column = 0;    
     for (int i = 1; i <= controls.Count; i++) 
     { 
      controls.Values[i-1].Top = row * controls.Values[0].Height; 
      controls.Values[i-1].Left = column * controls.Values[0].Width; 

      if (i % controlsPerRow == 0) 
      { 
       // This finishes a row 
       row++; 
       column = 0; 
      } 
      else 
      { 
       column++; 
      } 
     } 

Проблема я бегу в том, что на первой итерации цикла, я буду умножая высоту управления по строке и присвоения это значение контрольной Top собственности. Первая строка равна 0, а первая высота равна 165. 0 * 165 = 0, но свойство Top содержит магическое значение -20 после присвоения 0.

У любого есть идеи, как это может произойти?

+0

Вы проверили в отладчике, что 'row * controlss.Values ​​[0] .Height' на самом деле' 0'? Кроме того, какой контроль? – SLaks

ответ

2

Вы пытаетесь переписать FlowLayoutPanel.
Рассмотрите возможность использования.


Кроме того, это выглядит как ваш controls поле является Dictionary<Something, Control>.
Помните, что порядок итерации Dictionary.Values не гарантируется, что означает, что вы не перебираете элементы управления в том порядке, в котором они были добавлены в словарь.