C# 是什么阻止我调整(缩小)windows窗体对象的大小?

C# 是什么阻止我调整(缩小)windows窗体对象的大小?,c#,winforms,resize,C#,Winforms,Resize,我有一个windows窗体对象,它包含3个对象,一个treeview、一个richtextbox和一个tabcontrol。它们没有停靠在windows窗体中,但它们被定位在顶部+左侧 我已经编写了代码,在调用表单调整大小事件处理程序时调整它们的大小,但它似乎只适用于增加表单大小,也就是说,我无法将表单调整为更小的大小。这包括我第一次增加主windows窗体,然后尝试将其恢复为原始大小的次数 在每个表单调整大小后,使用以下代码手动设置三个对象的大小: treeView1.Heig

我有一个windows窗体对象,它包含3个对象,一个treeview、一个richtextbox和一个tabcontrol。它们没有停靠在windows窗体中,但它们被定位在顶部+左侧

我已经编写了代码,在调用表单调整大小事件处理程序时调整它们的大小,但它似乎只适用于增加表单大小,也就是说,我无法将表单调整为更小的大小。这包括我第一次增加主windows窗体,然后尝试将其恢复为原始大小的次数

在每个表单调整大小后,使用以下代码手动设置三个对象的大小:

        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

是什么阻止窗体调整到更小的大小?

在主窗体对象上设置的自动调整大小阻止窗口减小到小于其中包含的对象的大小。由于主窗体中的对象在每次扩展调整大小时都会增加,因此主窗体在任何调整大小增长后都无法收缩。通过在主窗体对象上禁用自动调整大小,我能够重新获得对调整大小的完全控制

只需将所有控件放入一个面板,并将面板的Dock属性设置为Fill即可。我相信它甚至可以在Autosize设置为true的情况下工作。

在Visual studio中右键单击Winform->选择属性->Autosize将设置为true->将其更改为False

在代码中包含这一行

this.AutoSize = false;

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

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

与上面的讨论相关,我发现在VS2010中使用VB.net时,我的一个标准Windows窗体不会随着鼠标选择而调整大小。这就好像FormBorderStyle被设置为Fixed。即使将FormBorderStyle更改为SizableToolWindow,也不会产生预期的鼠标大小行为

以下是表单设计属性中的一些表单设置:

Autosize: false
AutoSizeMode: growonly
Doublebuffered: true
Enabled: true
FormBorderStyle: Sizable
ImeMode: NoControl
Locked: false
AutoScaleMode: Font
AccessibleRole: default
此表单的所有可见或代码属性设置,以及其所有设计器属性设置,都与同一项目中的其他表单相同,允许正确调整鼠标大小。清洗溶液并重建它也不能解决冻结表单的问题。单击“最大化”确实有效,单击“最小化”也有效。表单大小可以按预期由代码设置。只有鼠标调整窗体大小时功能不正常

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

myForm.AutoScaleMode = Windows.Forms.AutoScaleMode.Inherit
在表单设计中,此参数已设置为.Font,其他正常工作的表单中也使用了该参数

然后。。。奇怪的是。。。在代码中将其从.Inherit更改回.Font也允许表单正确调整大小


在本例中,代码中的to.Inherit或to.Font设置似乎是纠正表单大小调整问题的关键元素。似乎存在一些隐藏参数,系统不会向用户显示这些参数,它们会以某种方式干扰表单的预期操作

检查最小宽度和最小高度

设计器视图:


如您所见,如果您将“最小宽度”和“最小高度”设置为“自动大小”设置为“false”,则按钮现在是您希望的大小:

我在这里遵循了所有答案,没有一个对我有效。我继续添加填充物,效果很好。
转到属性选项卡,选择标签并添加填充。

只需将表单属性中的默认最小大小更改为零以外的数字,如10

我自己就能够解决这个问题,通过将FormBorderStyle设置为SizableToolWindow,在寻找我自己的答案时发现了这个问题。似乎Sizeable边框样式具有某种默认的最小宽度,我无法将其设置为136以下,而Sizeable ToolWindow则没有。

您为什么不在.NET中使用停靠机制?它会为你调整大小。对接似乎对我们所希望的太严格了,GUI方面。表单工具的地位最终颠覆了我们实现的易用性。对于阅读本文的其他人,请查看AutoSizeMode属性,该属性默认为GrowtOnly。将其更改为Growth和Shrink也可以解决此问题。请检查我有关最小尺寸的答案。这些答案冗长且不清楚,但在第二次查看时,与其他答案相比,不完全是VLQ。尝试提供一些示例代码,以帮助问题的作者。