【问题标题】:What's preventing me from resizing (downsizing) my windows form object?是什么阻止我调整(缩小)我的 Windows 窗体对象的大小?
【发布时间】:2011-04-04 00:25:17
【问题描述】:

我有一个 Windows 窗体对象,它包含 3 个对象、一个树视图、一个富文本框和一个选项卡控件。它们没有停靠在窗口窗体中,但它们是锚定的(顶部+左侧)。

我已经编写了代码来在调用 form-resize 事件处理程序时调整它们的大小,但它似乎只适用于增加表单大小,也就是说,我无法将表单调整为较小的尺寸。这包括我首先增加主窗口窗体然后尝试将其恢复为原始大小的时间。

这三个对象的大小是在每次Form调整大小后手动设置的,代码如下:

        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)

是什么阻止了表单被调整为更小的尺寸?

【问题讨论】:

  • 您是否有理由不只使用 .NET 中的对接机制?它会为您调整大小。
  • 在 GUI 方面,对接似乎对我们所希望的过于严格。我们的表单工具的地位最终推翻了我们实施的便利性。

标签: c# winforms resize


【解决方案1】:

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

【讨论】:

  • 对于其他阅读本文的人,请查看默认为 GrowOnly 的属性“AutoSizeMode”。将其更改为 GrowAndShrink 也可以解决此问题(没有承诺)。
  • 查看我关于最小尺寸的答案
【解决方案2】:

如果上面没有解决,请检查表单最小尺寸是否设置为大于您需要的值。

【讨论】:

    【解决方案3】:

    在 Visual Studio 中右键单击您的 Winform -> 选择 properties ->AutoSize 将设置 True - > 改成False

    在你的代码中包含这一行

    this.AutoSize = false;
    

    【讨论】:

      【解决方案4】:

      只需将表单属性中的默认 MinimumSize 更改为非零的数字(如 10)

      【讨论】:

        【解决方案5】:

        只需将所有Controls 放入Panel 并将PanelDock 属性设置为Fill。我相信即使 Autosize 设置为 true,它也能正常工作。

        【讨论】:

          【解决方案6】:

          检查最小宽度和最小高度

          设计器视图:

          如您所见,如果您设置了最小宽度和最小高度,同时将自动尺寸设置为 false,那么按钮现在就是您想要的尺寸了 :)

          【讨论】:

          • 尝试提供一些示例代码来帮助问题的作者。
          【解决方案7】:

          我在这里遵循了所有答案,但没有一个对我有用。我继续添加填充,它起作用了。 转到属性选项卡,选择标签并添加填充。

          【讨论】:

            【解决方案8】:

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

            与上面的讨论相关,我发现(在 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
            

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

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

            myForm.AutoScaleMode = Windows.Forms.AutoScaleMode.Inherit
            

            该参数在表单设计中设置为.Font,在其他正常工作的表单中也使用了该参数。

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

            在这种情况下,代码中的设置(.Inherit.Font)似乎是纠正表单大小调整问题的关键因素。似乎存在系统未向用户显示的隐藏参数,它们以某种方式干扰了表单的预期操作。

            【讨论】:

            • 罗嗦且不清楚,但再看和与其他人相比,不是很VLQ。
            【解决方案9】:

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

            【讨论】:

              猜你喜欢
              • 2015-02-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-19
              • 1970-01-01
              • 2013-04-30
              • 2019-04-30
              • 1970-01-01
              相关资源
              最近更新 更多