标签之间的间距一致c#

时间:2016-05-20 16:22:43

标签: c#

我正在尝试使用一致的间距对齐一定数量的标签。 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);
        }
    }

Image of executed code

4 个答案:

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