【问题标题】:How do I keep a label centered in WinForms?如何在 WinForms 中保持标签居中?
【发布时间】:2011-05-19 15:03:51
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net winforms centering


    【解决方案1】:

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

    【讨论】:

    • 感谢 decyclone,它成功了。你能指导一下 Dock 是做什么的吗?
    • 使用Control.Dock 属性(msdn.microsoft.com/en-us/library/…),您可以将控件停靠(粘贴)到容器的某一侧。例如LeftTopRightBottomFill 告诉控件占用容器中的所有可用空间。
    • 除非您希望标签填满所有可用空间,否则您可能希望按照 user3866622 在他/她的编程解决方案中的建议将 Dock 属性设置为“无”。
    • 工作,但我不需要对 Dock 设置做任何事情。
    • Dock 设置是不必要的。更改 AutoSize 属性会为标签提供一个边界框,您可以手动调整其大小。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

            我想做类似的事情,但是在带有背景图像的表单上,我发现当标签中的文本发生变化时,使用这种方法重绘很明显,所以我做了以下操作: * 将标签 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 属性设置为此返回值。这确保了当文本更改时标签始终位于表单的中心,并且全屏表单的重绘不明显。

            【讨论】:

              【解决方案7】:

              你可以试试下面的代码sn-p:

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

              真的是中心

              【讨论】:

                猜你喜欢
                • 2020-05-03
                • 2013-04-15
                • 1970-01-01
                • 1970-01-01
                • 2023-04-03
                • 2020-07-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多