我正在尝试使用任意数量的具有相同高度和宽度的控件填充容器。我允许用户缩小或增长此容器,容器将组织控件,使其尽可能适合一行中的大多数控件。以下是组织它的代码:
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。
任何人都知道如何发生这种情况?
答案 0 :(得分:2)
您正在尝试重写FlowLayoutPanel 请考虑使用它。
此外,您的controls
字段似乎是Dictionary<Something, Control>
请注意,Dictionary.Values
的迭代顺序无法保证,这意味着您没有按照它们添加到字典中的顺序循环控件。