PreferredSize属性与GetPreferredSize不匹配

时间:2011-04-12 18:57:23

标签: winforms

我正在尝试编写一个菜单项控件,它将根据它包含的文本长度自动调整(如Label控件)。

为此,我重写了GetPreferredSize方法来计算文本的长度:

    public override Size GetPreferredSize(Size proposedSize)
    {
        Size size = TextRenderer.MeasureText(this.Text, this.Font);
        int w = size.Width + this.Padding.Left + this.Padding.Right;
        int h = size.Height + this.Padding.Top + this.Padding.Bottom;
        return new Size(w, h);
    }

然后我将一堆这些控件添加到包含的菜单控件中,并尝试根据上面的大小定位它们:

            if (item.AutoSize)
            {
                item.Size = item.PreferredSize;
            }

            item.Left = _Left;
            item.Top = _Top;

            if (this.MenuOrientation == Orientation.Vertical)
            {
                _Top += item.Size.Height;
            }
            else
            {
                _Left += item.Size.Width;
            }

            this.Controls.Add(item);

但是,PreferredSize和GetPreferredSize返回的大小不同。对于一个字符串,GetPreferredSize返回{Width = 147,Height = 27},但PreferredSize返回{Width = 105,Height = 21}。因此,控件重叠而不是彼此相邻。

我尝试覆盖MinimumSize而不是GetPreferredSize,但这也从我计算的内容缩小。

所以我的问题是,这样做的正确方法是什么?我还想了解AutoSize,PreferredSize,MinimumSize和MaximumSize的交互方式。 MSDN对此没什么帮助。

0 个答案:

没有答案