刚添加到容器时C#标签大小错误

时间:2017-08-16 08:26:39

标签: c# controls flowlayoutpanel

我已经通过使用TextTenderer.MeasureText找到了解决此问题的方法,但是对于为什么会发生这种情况我非常困惑。我这里有一段代码:

var label = new Label() { Name = col.ColumnName, Text = col.ColumnText + ":", AutoSize = true, Margin = new Padding(1, 1, 1, 0), Font = label8.Font };
label.MaximumSize = new Size(148, 0);

Control input = null;
// Do stuff to input but not label

flowLayoutPanel2.Controls.Add(label);
flowLayoutPanel2.Controls.Add(input);
flowLayoutPanel2.Height += label.Height + input.Height + 5;

在将标签添加到flowLayoutPanel之前,标签的优先高度和宽度分别为16和78(很好),但在添加标签后,实际高度和宽度现在为176和16.我不知道我真的明白176的高度来自哪里,但每次都是相同的数字(176)。高度应为16,但宽度显然取值

在面板中添加的所有5个标签和5个其他控件中,只添加了第二个标签,这是总共第三个控件,经历了这一点。添加标签后,程序再次到达显示的代码段,标签的大小突然正确。

如果有人能告诉我发生了什么,那将非常感激。

1 个答案:

答案 0 :(得分:0)

我相信这是因为,当Label的父项发生更改时,当AutoSize设置为true时,它会自动调整大小(取自ReferenceSource):

protected override void OnParentChanged(EventArgs e) {
    base.OnParentChanged(e);
    if (SelfSizing) {
        // VSWhidbey 368232: in the case of SelfSizing
        // we dont know what size to be until we're parented
        AdjustSize();
    }
    Animate();
}

如果将Label放置在FlowLayoutPanel中,则在Visual Studio Designer中也会发生相同的情况,那么您将看到其大小将自动更新。