如何使标签在WinForms中居中?


137

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

我想在中心表格中将该标签居中。我想要一个解决方案,使标签中只有一个单词还是整个句子都可以居中。

Answers:


281

套装LabelAutoSize属性FalseTextAlign属性MiddleCenterDock属性Fill


谢谢德旋风,它的工作。您能指导Dock做什么吗?
haan​​si 2010年

3
使用Control.Dock属性(msdn.microsoft.com/en-us/library/…),可以将控件停靠(粘贴)到容器的特定一侧。例如LeftTopRightBottomFill告诉控件占用容器中的所有可用空间。
decyclone

1
除非您希望标签填满所有可用空间,否则您可能希望按照user3866622在其编程解决方案中的建议将Dock属性设置为“ None”。
蒂姆(Tim)

3
工作,但是我不需要对Dock设置做任何事情。
吉姆·费尔

4
Dock设置是不必要的。更改AutoSize属性会为标签提供一个边框,您可以手动调整其大小。
Nick Roberts

13

一些次要的附加内容,以编程方式进行设置:

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

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



10

如果您不希望将标签停靠在整个可用区域中,只需设置SizeChanged事件而不是TextChanged。当autosize属性设置为True时,更改每个字母将更改标签的width属性及其文本。因此,顺便说一下,您可以使用任何公式来使标签在表单中居中。

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

2

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

  1. 我进行了BackColor这样的设置AutoSize = falseDock = Fill导致背景色填充了整个表单
  2. AutoSize无论如何我都无法设置为false,因为我的标签文本是动态的

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

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

1

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

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

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

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


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

真的很中心

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.