2

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

4

5 回答 5

8

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

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

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

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

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

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

您可以使用此技术将面板停靠到任何左侧、右侧、顶部和底部边框。并适当调整对话框大小。

于 2009-12-09T06:54:22.110 回答
4

我可以建议你要这样做吗?我知道您正在努力为您的用户提供帮助,但是让窗口随机缩小(用户可能会觉得它是随机的)会让人感到困惑甚至令人沮丧。新的 Windows 7 UI 功能 Aero Snap 可能更是如此,即您将窗口停靠在左侧,然后它会根据您调整大小。

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

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

于 2009-12-14T17:34:56.103 回答
4

尝试使用 TableLayoutPanel 或 flowlayoutpanel 控件。
http://msdn.microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.aspx
http://visualbasic.about.com/od/usingvbnet/a/tloflopnl.htm

于 2009-12-05T12:13:47.623 回答
0

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

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

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

于 2009-12-08T14:07:06.880 回答
-1

使用 System.Drawing.Graphics.MeasureString

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

文本=你的文本;字体=标签字体;宽度=标签的最大宽度;

MSDN 中的测量字符串

你可以谷歌了解更多

于 2009-12-14T19:44:46.843 回答