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

6jjcrrmo  于 2023-03-13  发布在  其他
关注(0)|答案(8)|浏览(234)

WinForms中,我使用Label来显示不同的消息,如成功、失败等。
我想把标签放在中间。我需要一个解决方案,无论标签中只有一个单词还是整个句子,它都能保持居中。

bn31dyow

bn31dyow1#

LabelAutoSize属性设置为False,将TextAlign属性设置为MiddleCenter,将Dock属性设置为Fill

vc6uscn9

vc6uscn92#

您将通过设置属性锚来实现它:没有。

oknwwptz

oknwwptz3#

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

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

Dockstyle和Content alignment可能会根据您的需要而有所不同。例如,对于wpf表单上的简单标签,我使用DockStyle.None。

1tuwyuhd

1tuwyuhd4#

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

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

cs7cruho5#

这个公认的答案对我不起作用,原因有二:
1.我设置了BackColor,因此设置AutoSize = falseDock = Fill会导致背景色填充整个表单
1.我不能将AutoSize设置为false,因为我的标签文本是动态的
相反,我只是使用表单的宽度和标签的宽度来计算左偏移:

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

m1m5dgzv6#

我想做一些类似的事情,但是在一个带有背景图像的表单上,我发现当标签中的文本更改时,使用此方法重画很明显,所以我做了以下操作:* 将标签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);
    }

并将标签的Location属性设置为这个返回值,这样可以确保当文本发生变化时标签始终位于表单的中心,并且全屏表单的重绘不会很明显。

eni9jsuy

eni9jsuy7#

您可以尝试以下代码片段:

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

这是真正的中心

fivyi3re

fivyi3re8#

“this.”是您所在的窗体,lblName是您希望居中的项。另外,“offsetInt”允许您将标签定位在中心的左侧或右侧。lblName.Location.Y保持窗体上现有的Y高度。

lblName.Location = new Point((int)((this.Width - lblName.Width) / 2) +/- offsetInt, lblName.Location.Y);

相关问题