PreferredSize属性与GetPreferredSize不匹配

问题描述

| 我正在尝试编写一个菜单项控件,该控件将根据其包含的文本长度(例如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在这方面几乎没有帮助。     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...