Windows窗体顶级属性错误

时间:2010-01-07 18:20:42

标签: c# forms controls properties

我正在尝试使用任意数量的具有相同高度和宽度的控件填充容器。我允许用户缩小或增长此容器,容器将组织控件,使其尽可能适合一行中的大多数控件。以下是组织它的代码:

        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属性在分配0后包含一个神奇的-20。

任何人都知道如何发生这种情况?

1 个答案:

答案 0 :(得分:2)

您正在尝试重写FlowLayoutPanel 请考虑使用它。


此外,您的controls字段似乎是Dictionary<Something, Control> 请注意,Dictionary.Values的迭代顺序无法保证,这意味着您没有按照它们添加到字典中的顺序循环控件。