【问题标题】:Resize panel to fit contained elements in windows forms调整面板大小以适应 Windows 窗体中包含的元素
【发布时间】:2011-11-26 09:03:13
【问题描述】:

我正在创建一个可折叠的面板元素,它本质上是一个带有按钮元素和按钮下方的面板元素的面板元素。单击该按钮会使相邻面板具有Visible = false。当子面板设置为不可见时,我想调整包含面板的大小。

我通过将Size 属性设置为可见元素(按钮或按钮和子面板)的宽度和高度的总和来手动完成此操作。

我很想知道是否有办法在不手动调用Size 的情况下强制调整包含面板的大小。

我想我正在寻找属性 Dock=Fill 的倒数,它会根据包含元素的大小自动调整元素的大小。

提前致谢。

【问题讨论】:

  • 我想就是这样。也许您可以使用 FlowLayoutPanel 自动调整其客户区域内的面板,但我认为您所做的是正确的。
  • 没人能看到的时候调整大小有什么意义?
  • @Hans Passant:对不起,这个问题的措辞可能很有趣。有两个面板。一个是不可见的,另一个包含按钮和不可见的面板。当内面板不可见时,外面板需要收缩,否则它不会塌陷,它只是消失了,但仍占用与以前相同的空间。当您展开和折叠说“通用控件”部分时,我试图按照您在 Visual Studio Forms Toolbox 中看到的内容做一些事情。

标签: winforms panel resize


【解决方案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() 否则它会抛出停靠顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多