147

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

我想将该标签放在中心表单的中心。我想要一个解决方案,无论标签中只有一个单词还是整个句子,都能让它居中。

4

7 回答 7

312

SetLabelAutoSize属性为FalseTextAlign属性为MiddleCenterDock属性为Fill

于 2010-12-03T08:37:04.943 回答
14

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

于 2014-06-03T09:48:07.807 回答
14

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

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

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

于 2014-07-22T23:13:26.690 回答
11

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

private void lblReport_SizeChanged(object sender, EventArgs e)
{
    lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
于 2015-05-12T14:19:50.280 回答
5

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

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

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

MyLabel.Left = (this.Width - MyLabel.Width) / 2;
于 2019-08-20T15:11:33.733 回答
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;
}

它真的是中心

在此处输入图像描述

于 2019-09-12T13:48:54.640 回答
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 属性设置为此返回值。这确保了当文本更改时标签始终位于表单的中心,并且全屏表单的重绘不明显。

于 2019-01-30T18:44:54.887 回答