如何在WinForms中保持标签中心?

时间:2010-12-03 08:33:30

标签: c# .net winforms centering

WinForms我使用Label来显示不同的消息,例如成功,失败等。

我想将中心标签置于中心位置。我想要一个能让它保持中心的解决方案,无论标签中只有一个单词还是整个句子。

7 个答案:

答案 0 :(得分:233)

Label的{​​{1}}属性设置为AutoSize,将False属性设置为TextAlign,将MiddleCenter属性设置为Dock

答案 1 :(得分:13)

您将通过设置属性Anchor:None来实现它。

答案 2 :(得分:12)

以编程方式设置的一些小的附加内容:

Label textLabel = new Label() { 
        AutoSize = false, 
        TextAlign = ContentAlignment.MiddleCenter, 
        Dock = DockStyle.None, 
        Left = 10, 
        Width = myDialog.Width - 10
};            

Dockstyle和内容对齐可能与您的需求不同。例如,对于wpf表单上的简单标签,我使用DockStyle.None。

答案 3 :(得分:7)

如果您不想在整个可用区域中停靠标签,只需设置SizeChanged事件而不是TextChanged。当autosize属性设置为True时,更改每个字母将更改标签的宽度属性及其文本。因此,顺便说一句,你可以使用任何公式来保持标签的中心形式。

private void lblReport_SizeChanged(object sender, EventArgs e)
{
    lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}

答案 4 :(得分:2)

接受的答案对我不起作用有两个原因:

  1. 我设置了BackColor,因此设置AutoSize = falseDock = Fill会使背景颜色填充整个表单
  2. 因为标签文本是动态的,所以我无法将AutoSize设置为false

相反,我只是使用表单的宽度和标签的宽度来计算左偏移量:

MyLabel.Left = (this.Width - MyLabel.Width) / 2;

答案 5 :(得分:1)

您可以尝试以下代码段:

private Point CenterOfMenuPanel<T>(T control, int height=0) where T:Control {
    Point center = new Point( 
        MenuPanel.Size.Width / 2 - control.Width * 2,
        height != 0 ? height : MenuPanel.Size.Height / 2 - control.Height / 2);

    return center;
}

这真的是中心

enter image description here

答案 6 :(得分:0)

我想做类似的事情,但是在带有背景图像的表单上,我发现当标签中的文本更改时,使用此方法可以明显地重绘,因此我执行以下操作: *将标签AutoSize设置为true,将TextAlign设置为MiddleCenter

然后,每次文本更改(我的操作是使用计时器完成的)时,我都会调用以下方法:

    private Point GetPosition()
    {
        int y = (this.Height / 2) - (label1.Height / 2);
        int x = (this.Width / 2) - (label1.Width / 2);
        return new Point(x, y);
    }

和标签的位置属性设置为这个返回值。这样可以确保在文本更改时标签始终位于表单的中心,并且全屏表单的重新绘制不明显。