我正在尝试使用一致的间距对齐一定数量的标签。 for循环后的对齐很好,但为什么第一个间距与其他间距不一致?
private void FrmMainGame_Load(object sender, EventArgs e)
{
Label l = new Label();
int margin = 1;
int width = (this.ClientSize.Width + margin - l.Size.Width) /10 ;
l.BackColor = Color.Red;
l.BorderStyle = BorderStyle.FixedSingle;
int x = width + margin;
l.Location = new Point(0, 5);
l.Size = new Size(width, 20);
this.Controls.Add(l);
for (int i = 1; i <= 9; i++)
{
l = new Label();
l.BackColor = Color.Red;
l.BorderStyle = BorderStyle.FixedSingle;
x += margin + width;
l.Location = new Point(x,5);
l.Size = new Size(width, 20);
this.Controls.Add(l);
}
}
答案 0 :(得分:0)
看看以下几行:
int x = width + margin;
l.Location = new Point(0, 5);
在循环中,每个按钮都放在:
l.Location = new Point(x, 5);
您似乎只是在0
打了x
。
答案 1 :(得分:0)
这是因为您在循环之前设置了x= width + margin
。如果width = 10,那么您将x设置为11(在第一个标签之后)。然后,在循环中,在放置第二个标签之前,在再次放置第二个标签之前,再次将x再次增加到22。
将其更改为int x=0
,我认为您应该做得很好。
答案 2 :(得分:0)
这是因为在循环中,您在向x添加宽度后设置新标签的位置。
如果你假设宽度= 10,那么在循环开始x = 11之前你设置x + = margin + width将使它成为22.所以你的第二个标签将放在x = 22
下一次迭代会很好,但你会看到第一个和第二个标签之间的差距。
在循环开始前尝试设置x = 0.
希望有所帮助。
答案 3 :(得分:0)
我认为其中一个错误是遵循以下行:
'int width = (this.ClientSize.Width + margin - l.Size.Width) /10 ;'
你取整个长度 - 一个元素的大小除以10.这实际上导致宽度为ClienSize.Width / 11 我认为以下其中一项更正确,可能会解决您的问题:
'int width = (this.ClientSize.Width + margin - l.Size.Width) /9 ;'
'int width = (this.ClientSize.Width / 10) - (margin*2) ;'