Ошибка Windows Top Forms - PullRequest
       15

Ошибка Windows Top Forms

0 голосов
/ 07 января 2010

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

        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.

Кто-нибудь знает, как это может произойти?

1 Ответ

2 голосов
/ 07 января 2010

Вы пытаетесь переписать FlowLayoutPanel .
Попробуйте использовать его вместо этого.


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...