2010-08-25 56 views
15

我有一个窗体对象,它包含3个对象,一个treeview,一个richtextbox和一个tabcontrol。它们不会停靠在窗体窗体中,但它们被锚定(顶部+左侧)。什么阻止我调整窗体对象的大小(缩小尺寸)?

我已经编写了代码来调整它们的大小,当一个表单调整大小的事件处理程序被调用,但它似乎只是为增加表单大小,也就是说,我不能调整窗体的大小更小的尺寸。这包括我首次增加主窗口窗体并尝试将其恢复到原始大小的时间。

三个对象的尺寸分别形成之后被手动设置用下面的代码调整:

 treeView1.Height += (this.Height - oldHeight); 
     richTextBox1.Width += (this.Width - oldWidth); 
     tabControl1.Width += (this.Width - oldWidth); 
     tabControl1.Height += (this.Height - oldHeight); 
     oldHeight = this.Height; 
     oldWidth = this.Width; 

的对象都没有设定的最小尺寸(它们都是在0,0整个调整大小处理)

什么是阻止表单被调整为较小的大小?

+0

是不是有一个原因,你不只是在.NET中使用对接机制?它会照顾你的大小。 – 2010-08-26 05:09:44

+0

对接似乎对我们所希望的,GUI方面的限制太多。我们的表单工具的位置最终影响了我们实现的容易度。 – Maixy 2010-08-29 07:21:54

回答

18

自动调整大小(它在主窗体对象上设置)可防止窗口减小到小于其中包含的对象的大小。随着主窗体中每个膨胀大小的对象增加,主窗体在调整大小增长后无法收缩。通过在主Form对象上禁用Autosize,我可以重新获得对调整大小的完全控制。

+2

对于阅读此内容的其他人,请查看默认为GrowOnly的属性“AutoSizeMode”。将其更改为GrowAndShrink也可能解决此问题(无承诺)。 – ManEatingCheese 2015-04-07 04:39:11

0

只需将您的所有Controls转换为Panel并将Panel的属性设置为DockFill即可。即使Autosize设置为true,我相信它仍然有效。

1

右键单击您WinForm的在Visual Studio中 - >选择性能 - >自动调整大小将设置 - >将其更改为

OR

包含这一行在您的代码中

this.AutoSize = false; 
4

如果上述内容无法解决问题,请检查表单最小大小未设置为大于所需值的值。

0

可能还有一种方法可以纠正无法通过正常鼠标选择调整大小的表单的行为。

与上面的讨论相关,我发现[在VS2010中使用VB.net]我的标准Windows窗体之一不会用鼠标选择调整大小。就好像FormBorderStyle被设置为“固定”形式。即使将FormBorderStyle更改为SizableToolWindow也没有给出预期的鼠标大小行为。

下面是表单设计属性某种形式的设置: 自动调整:假 AutoSizeMode:growonly Doublebuffered:真 启用:真 FormBorderStyle:可调整大小的 ImeMode:NOCONTROL 锁定:假 AutoScaleMode:字体 的AccessibleRole:默认

此表单的所有可见或代码属性设置及其所有设计器属性设置都与同一项目中可正确允许鼠标调整大小的其他表单完全相同。清理解决方案,重建它也没有解决冻结表单的问题。点击最大化确实奏效,点击最小化也是如此。表单大小可以按照预期的代码设置。只有鼠标调整大小的窗体才能正常工作。

我发现,所需鼠标选择调整大小可以通过设置,在代码中,通过设置参数再次启用:

myForm.AutoScaleMode = Windows.Forms.AutoScaleMode.Inherit

此参数有在表单的设计中被设置为“字体”,这也被用于其他正常工作的形式。

然后......奇怪......将它从.Inherit改回到代码中的“.Font”还允许窗体正确调整大小。

在这种情况下,代码中的设置(无论是.Inherit还是.Font)似乎是纠正窗体大小调整问题的关键元素。看起来系统没有显示用户的隐藏参数,它以某种方式干扰了表单的预期操作。

+0

罗嗦和不清楚,但在第二次看,并与其他人比较,不太VLQ。 – 2015-12-16 02:58:21