【发布时间】:2011-01-19 19:38:12
【问题描述】:
我有一个面板,里面有一个标签。
有时,标签很长,必须调整面板大小。
我已将两个控件的 Autosize 属性设置为 true,但是 ....
你能帮帮我吗?
【问题讨论】:
-
您确定没有忘记为(嵌套面板)设置 AutoSize 的第三个控件吗?
-
另外,请确保标签的 Dock 设置为 None。
我有一个面板,里面有一个标签。
有时,标签很长,必须调整面板大小。
我已将两个控件的 Autosize 属性设置为 true,但是 ....
你能帮帮我吗?
【问题讨论】:
您还必须将包含容器的AutoSize 设置为true,直到窗口。
我最后一次尝试这样做涉及使用 TableLayoutPanel 等重新设计表单,因为 Dock/Anchor 和 AutoSize 似乎不能很好地混合。
【讨论】:
我已将两个控件的 Autosize 属性设置为 true,但是 ....
我可以从“但是”中看出您的要求。这就是标签的 AutoEllipsis 属性。将其设置为 true 并设置 MaximumSize 属性,以便标签不能大于其容器。用户会看到……所以她会意识到文本被截断了。她会将鼠标悬停在标签上以获取包含全文的工具提示。
让一切都适应一个标签是非常不切实际的。您通常可以操纵 MaximumSize 让它垂直增长一段时间,直到一个点。
【讨论】:
我遇到了类似的问题,这里有一个代码给你。假设您的 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();
}
【讨论】: