C# 窗口高度只会变大,不会变小

Posted

技术标签:

【中文标题】C# 窗口高度只会变大,不会变小【英文标题】:C# window height only gets bigger, not smaller 【发布时间】:2012-05-27 01:07:17 【问题描述】:

我有一个带有可折叠组框的表单(从http://www.codeproject.com/Articles/12835/XP-Style-Collapsible-GroupBox 获得)。我基本上使用它来显示/隐藏表单上的高级选项。然而,组框本身并没有问题,因为我只使用普通的Panel 做了同样的事情,我更改了 Visible 属性,问题是一样的:

当我隐藏这个框时,我希望窗口相应地缩小。因此,当您单击框标题时,我得到了代码,基本上如下所示:

if (OptionsPanel.IsCollapsed)
    this.Height -= (OptionsPanel.Height - OptionsPanel.CollapsedHeight);
else
    this.Height += (OptionsPanel.Height - OptionsPanel.CollapsedHeight);

问题是 - 当您展开框时,窗口确实会相应地增长,但是当您折叠框时,它不会缩小。事实上,我所做的一切似乎都无法让窗口变小——我什至尝试过硬编码窗口大小,但它永远不会变小,只会变大。

我是否缺少一些东西来完成这项工作?还是有更好的组件可以做到这一点?老实说,我很震惊工具箱中没有用于执行此类操作的默认控件,因为这似乎是相当常见的事情,而且我在很多表单上都看到过类似的事情。似乎不是那种你应该去 3rd 方插件或滚动你自己的代码的事情。

【问题讨论】:

AutoSize 属性是否设置为true?另外,您是否检查过代码在折叠、使用断点或调试打印等时实际被调用? 代码肯定达到了。检查所有带有断点的路径。至于 AutoSize,请参阅下面的回复。不知道为什么它不起作用,但我现在正在做的只是禁用该部分而不是隐藏它。不是我想要的,但现在可能就足够了。 【参考方案1】:

您是否尝试添加 AutoSizeMode=GrowAndShrink 属性?

最好同时 AutoSize=true, AutoSizeMode=GrowAndShrink

在 C# 中

OptionsPanel.AutoSize = true;
OptionsPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;

参考:http://msdn.microsoft.com/en-us/library/system.windows.forms.autosizemode.aspx

【讨论】:

请注意,这也可以通过属性面板在设计模式下完成。 看起来很有希望,但是当你隐藏面板时,这会让整个事情完全消失,包括让它重新出现的按钮,所以你不能让它重新打开。如果我可以让它只在高度而不是宽度上自动调整大小,它可能会起作用,但我不知道该怎么做...... 如果按钮在面板之外,那么它不应该消失。您可以发布主窗口 XAML 吗? 我没有使用 XAML - 这一切都在表单设计器中完成。在这种情况下,按钮是可折叠组框的标题,而不是实际按钮。 (请参阅我上面发布的链接 - 这不是我的代码。)我尝试制作一个不可见的面板,但随后表单根本不会改变大小,无论是更大或更小。我只是在原来的地方得到一个空白。【参考方案2】:

确保您的表单的AutoSize 设置为True,AutoSizeMode 设置为GrowAndShrink 默认为GrowOnly

【讨论】:

好吧,我没有得到调整大小的光标。当我最大化时,它会变好。当我恢复时,它会保持最大化的大小,但窗口会恢复。因此,窗口只能在我的情况下增长.. 这确实有效! ***.com/questions/3571041/… 在我的情况下,我的回答与您的回答完全相反并且有效! :D @Totty.js 这可能是我一直以来最喜欢的关于堆栈溢出的评论,特别是因为我也可以做完全相反的事情。

以上是关于C# 窗口高度只会变大,不会变小的主要内容,如果未能解决你的问题,请参考以下文章

使用WPF更改与窗口大小相关的字体大小?

delphi 字体变小

Qt designer 怎样使用 layout 控制布局, 可以实现 随着窗口的拉大拉小,部件也随着变大变小啊。。

element的table组件在flex布局下宽度自适应解决办法

GDI 中的多边形函数

pr视频素材为什么会变大。怎么调回来