调整面板大小以适应 Windows 窗体中包含的元素
Posted
技术标签:
【中文标题】调整面板大小以适应 Windows 窗体中包含的元素【英文标题】:Resize panel to fit contained elements in windows forms 【发布时间】:2011-11-26 09:03:13 【问题描述】:我正在创建一个可折叠的面板元素,它本质上是一个带有按钮元素和按钮下方的面板元素的面板元素。单击该按钮会使相邻面板具有Visible = false
。当子面板设置为不可见时,我想调整包含面板的大小。
我通过将Size
属性设置为可见元素(按钮或按钮和子面板)的宽度和高度的总和来手动完成此操作。
我很想知道是否有办法在不手动调用Size
的情况下强制调整包含面板的大小。
我想我正在寻找属性 Dock=Fill
的倒数,它会根据包含元素的大小自动调整元素的大小。
提前致谢。
【问题讨论】:
我想就是这样。也许您可以使用 FlowLayoutPanel 自动调整其客户区域内的面板,但我认为您所做的是正确的。 没人能看到的时候调整大小有什么意义? @Hans Passant:对不起,这个问题的措辞可能很有趣。有两个面板。一个是不可见的,另一个包含按钮和不可见的面板。当内面板不可见时,外面板需要收缩,否则它不会塌陷,它只是消失了,但仍占用与以前相同的空间。当您展开和折叠说“通用控件”部分时,我试图按照您在 Visual Studio Forms Toolbox 中看到的内容做一些事情。 【参考方案1】:我刚刚尝试了ispiro给出的答案。您不需要删除和添加控件。设置Visible
可以工作。这取决于您何时执行布局。如果 panel2 在 panel1 之前执行布局,则 panel2 不会调整大小。为方便起见,请改用父母 PerformLayout
。
它是这样使用的:
panel1.ResumeLayout(false);
panel2.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
【讨论】:
【参考方案2】:怎么样:
panel1.Size = new Size(0, 0);
panel1.AutoSize = true;
然后不要改变可见性,而是这样做:
panel1.Controls.Remove(panel2);
当你想把它带回来时:
panel1.Controls.Add(panel2);
(panel1 为后面板)
【讨论】:
伟大的想法。所以 AutoSize 是我正在寻找的属性。唯一的问题是这应该跟一个 panel2.BringToFront() 否则它会抛出停靠顺序。以上是关于调整面板大小以适应 Windows 窗体中包含的元素的主要内容,如果未能解决你的问题,请参考以下文章
如何将 QMainWindow 调整大小事件传递给 QMainWindow 中包含的 QGLWidget?
在容器 Kendo 窗口调整大小时动态更改 Kendo Grid 行的高度