如何为表单设置“首选大小”?

时间:2009-12-05 11:42:36

标签: c# .net winforms behavior autosize

我在表单上有一些控件,我将它们固定在表单的左侧和右侧,以确保它们随表单增长和缩小。我的表单也设置为自动增长和缩小,以适应可能获得长字符串的一些标签。当这些标签移除长字符串时,我希望我的表单恢复到之前的宽度。在我的表格上左右固定的所述控件似乎阻止了这种情况。我可以按照我的意愿使它工作吗?

5 个答案:

答案 0 :(得分:8)

这是一种不需要你编写任何特定尺寸代码的方法......但它假设你的所有按钮都在底部。

步骤1.设置对话框的最小尺寸。

步骤2.在表单上创建一个面板。

步骤3.将按钮移动到面板中。

步骤4.将面板停靠在表单底部。

步骤5.确保AutoSizeMode对话框设置为ShrinkAndGrow

您可以使用此技术将面板停靠到左,右,顶部和底部边框中的任何一个。并正确调整对话框大小。

答案 1 :(得分:4)

答案 2 :(得分:4)

我可以建议你这样做吗?我知道你正试图为你的用户提供帮助,但是随机缩小窗口(对用户来说可能是随机的)会让人感到困惑,也许会令人沮丧。使用新的Windows 7 UI功能Aero Snap可能更是如此,即您将窗口停靠在左侧,然后调整大小。

考虑用户偏好的窗口大小。用户已经告诉你他们想要的东西有多大,尊重它!

编辑:我还应该补充一点,如果你沿着这条路走下去就有一个bug。考虑到1000像素宽的形式,用户将其拖动到(-500,100)以在显示器上显示一半。如果他们点击了一个可见的按钮(或者更糟糕的是,某些事情发生在背景中!)并且表单大小调整到450像素,那么窗口就会消失!用户在任务栏中看到它,但除非他们知道一些花哨的alt +空格快捷方式,否则无法访问它。

答案 3 :(得分:0)

一个建议是挂钩OnPaint事件。您的控件是由此点构建的,并且将在表单上设置其初始位置值。将您想要的所有内容捕获到表单级别的私有对象集中。

在OnStringsRemoved事件期间,从您的对象中读取并按原样设置所有内容。修改锚定的控件应该触发表单调整大小,但可能是您必须手动设置所有内容。也许修改表单会缩小控件而不是相反。

另一种建议是硬编码您的初始值并每次都返回它们。我个人会选择OnPaint。它可以帮助您处理大字体增加控件大小或框架在用户看到之前所做的任何事情。

答案 4 :(得分:-1)

使用System.Drawing.Graphics.MeasureString

    public SizeF MeasureString(string text, Font font, int width);

文本= yourtext; 字体= fontofthelabel; 宽度= maxwidthoflabel;

MeasureString in MSDN

你可以google了解更多