2016-05-20 106 views
0

我试图用一致的间距对齐一定数量的标签。 for循环之后的对齐很好,但为什么第一个间距与其他间距不一致呢?标签之间的一致间距c#

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); 
     } 
    } 

Image of executed code

+0

这是winforms吗? WPF? – ryanyuyu

回答

0

看看这些行:

int x = width + margin; l.Location = new Point(0, 5);

在你的循环,每个按钮被放置在:

l.Location = new Point(x, 5);

好像你刚刚输入0你打算把x

0

这是因为你在循环之前设置int x= width + margin。如果width = 10,那么你将x设置为11(紧跟在第一个标签之后)。然后,在循环中,在放置第二个标签之前,您再次将x增加到22,甚至在放置第二个标签之前。

更改为int x=0,我认为你应该很好。

+0

谢谢!立即解决 – Chanter

0

这是因为在循环中,在将宽度添加到x后设置了新标签的位置。

如果你想宽度= 10,在循环开始X = 11,那么你之前设置X + =保证金+宽度,这将使它22.所以,你的第二个标签将被放置在x = 22

下迭代会很好,但你会看到第一个和第二个标签之间的差距。

在循环开始之前尝试设置x = 0。

希望有所帮助。

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) ;'