【问题标题】:Resize Panel according to Label size根据标签大小调整面板大小
【发布时间】:2011-01-19 19:38:12
【问题描述】:

我有一个面板,里面有一个标签。

有时,标签很长,必须调整面板大小。

我已将两个控件的 Autosize 属性设置为 true,但是 ....

你能帮帮我吗?

【问题讨论】:

  • 您确定没有忘记为(嵌套面板)设置 AutoSize 的第三个控件吗?
  • 另外,请确保标签的 Dock 设置为 None。

标签: c# winforms


【解决方案1】:

您还必须将包含容器的AutoSize 设置为true,直到窗口。

我最后一次尝试这样做涉及使用 TableLayoutPanel 等重新设计表单,因为 Dock/Anchor 和 AutoSize 似乎不能很好地混合。

【讨论】:

    【解决方案2】:

    我已将两个控件的 Autosize 属性设置为 true,但是 ....

    我可以从“但是”中看出您的要求。这就是标签的 AutoEllipsis 属性。将其设置为 true 并设置 MaximumSize 属性,以便标签不能大于其容器。用户会看到……所以她会意识到文本被截断了。她会将鼠标悬停在标签上以获取包含全文的工具提示。

    让一切都适应一个标签是非常不切实际的。您通常可以操纵 MaximumSize 让它垂直增长一段时间,直到一个点。

    【讨论】:

    • 必须将鼠标悬停在标签上才能知道它读取的内容也是非常不切实际的。只为用户。通常我会在这种情况下支持用户;-)
    【解决方案3】:

    我遇到了类似的问题,这里有一个代码给你。假设您的 Panel 锚定到表单(上、左、下、右),则需要调整大小的是表单,而不是 Panel。

        public static void FitPanel(Panel pnl)
        {
            int maxright = 0;
            int maxbottom = 0;
            foreach (Control ctl in pnl.Controls)
            {
                maxright = (ctl.Right > maxright ? ctl.Right : maxright);
                maxbottom = (ctl.Bottom > maxbottom ? ctl.Bottom : maxbottom);
            }
            int deltabottom = pnl.Bottom - (pnl.Top + maxbottom);
            int deltaright = pnl.Right - (pnl.Left + maxright);
            Form frm = pnl.FindForm();
            frm.SuspendLayout();
            frm.Height = frm.Height - deltabottom;
            frm.Width = frm.Width - deltaright;
            frm.ResumeLayout();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多