.net 锚不起作用

.net 锚不起作用,.net,winforms,.net,Winforms,情况: 在表单中,我有一个TableLayoutPanel(Dock=Fill)和一个标签(父级是表单,而不是TableLayoutPanel),其锚定设置为Top+Bottom+Left+Right 现在,当我运行这个表单并将其重新zise时,标签不会像我预期的那样在表单中居中 解决方法?您将标签autosize设置为true-我很确定这就是导致问题的原因 将其更改为false。您已将标签autosize设置为true-我很确定这就是导致问题的原因 将其更改为false。必须设置为false

情况:

在表单中,我有一个TableLayoutPanel(Dock=Fill)和一个标签(父级是表单,而不是TableLayoutPanel),其锚定设置为Top+Bottom+Left+Right

现在,当我运行这个表单并将其重新zise时,标签不会像我预期的那样在表单中居中


解决方法?

您将标签autosize设置为true-我很确定这就是导致问题的原因


将其更改为false。

您已将标签autosize设置为true-我很确定这就是导致问题的原因


将其更改为false。

必须设置为false。

必须设置为false。

在多个角点上设置锚定将尝试调整标签大小,除非仅将一个角点设置为锚定

如果将
AutoSize
设置为
false
并将标签上的
TextAlign
更改为
MiddleCenter
,则文本将保持居中,但这可能是不需要的,因为标签尺寸会发生变化

解决方法是捕获
表单的
Resize
事件,并手动设置标签的位置(未测试)。这意味着您不需要将
AutoSize
设置为false,也不需要设置锚定

void OnResize(object sender, EventArgs e)
{
   Point pos = new Point((this.Width/2) - (Label.Width / 2), 
     (this.Height/2) - (Label.Height/2));
   Label.Location = pos;
}

在多个角点上设置锚定将尝试调整标签的大小,除非仅将1个角点设置为锚定

如果将
AutoSize
设置为
false
并将标签上的
TextAlign
更改为
MiddleCenter
,则文本将保持居中,但这可能是不需要的,因为标签尺寸会发生变化

解决方法是捕获
表单的
Resize
事件,并手动设置标签的位置(未测试)。这意味着您不需要将
AutoSize
设置为false,也不需要设置锚定

void OnResize(object sender, EventArgs e)
{
   Point pos = new Point((this.Width/2) - (Label.Width / 2), 
     (this.Height/2) - (Label.Height/2));
   Label.Location = pos;
}

设置
Anchor
属性会导致控件尝试与指定边保持恒定距离。因此,如果缩小表单,标签仍将保持与
顶部
左侧
的距离,因此不应保持居中

实际上,我认为如果希望标签保持居中,应该将其
锚定属性设置为
,而不是
上、下、左、右

现在,如果您要更改标签的文本,这里有一个折衷方案:

  • 将标签的
    Anchor
    属性设置为
    None
    。这将使它保持居中
  • 将标签的
    AutoSize
    属性设置为
    false
    。这将允许您指定一个恒定的大小
  • 将标签的大小设置为远远大于要显示的任何文本所需的大小。将结果“膨胀标签”放在表单的中心
  • 将标签的
    TextAlign
    属性设置为
    MiddleCenter

  • 实际上,它提供的是一个在表单中始终居中的矩形,其中有一些文本始终居中于该矩形内。

    设置
    锚定
    属性会使控件尝试与指定的边保持恒定的距离。因此,如果缩小表单,标签仍将保持与
    顶部
    左侧
    的距离,因此不应保持居中

    实际上,我认为如果希望标签保持居中,应该将其
    锚定属性设置为
    ,而不是
    上、下、左、右

    现在,如果您要更改标签的文本,这里有一个折衷方案:

  • 将标签的
    Anchor
    属性设置为
    None
    。这将使它保持居中
  • 将标签的
    AutoSize
    属性设置为
    false
    。这将允许您指定一个恒定的大小
  • 将标签的大小设置为远远大于要显示的任何文本所需的大小。将结果“膨胀标签”放在表单的中心
  • 将标签的
    TextAlign
    属性设置为
    MiddleCenter

  • 实际上,这给你的是一个始终居中于表单中心的矩形,其中一些文本始终居中于该矩形内。

    我认为它根本不会居中。
    调整窗体大小时,只有右侧和底部会移动,因此,如果在所有4条边上都有锚定,则只有标签(或任何控件)的右侧和底部会随之移动,而左侧和顶部不会移动

    我认为它根本不会以自己为中心。
    调整窗体大小时,只有右侧和底部会移动,因此,如果在所有4条边上都有锚定,则只有标签(或任何控件)的右侧和底部会随之移动,而左侧和顶部不会移动

    诀窍是在标签上没有锚。由于锚定将尝试保持与边缘的距离,因此您的设置将导致标签随窗体增长。不幸的是,这将与自动调整大小设置冲突,自动调整大小设置将希望保持标签的大小相同


    通过没有锚定,标签可以自由移动,而不是调整大小,并且它将保持与表单边缘成比例的正确距离。

    诀窍是在标签上没有锚定。由于锚定将尝试保持与边缘的距离,因此您的设置将导致标签随窗体增长。不幸的是,这将与自动调整大小设置冲突,自动调整大小设置将希望保持标签的大小相同


    通过没有锚定,标签可以自由移动,而不是调整大小,并且它将保持与表单边缘成比例的正确距离。

    锚定设置为
    。这对我有效。将你的
    锚定设置为
    None
    。这对我很管用。但是,如果我更改文本,它就会变得不居中。@serhio:我明白了。T