自动调整面板上呈现的多个Windows窗体的大小

时间:2018-07-23 03:28:12

标签: c# winforms

我有一个带有面板的Windows窗体。此表单包含三个面板。一个面板是可折叠的,并用作侧边栏,另一个面板位于顶部,用于显示标题,最后一个是通过单击面板之一中要处理的一项来打开表单的占位符。 >

现在我要做的是根据占位符面板的状态调整占位符面板的大小(仅宽度)(仅宽度)和在面板上打开的窗体的大小,可以将其扩展或崩溃了。扩展坞无法正常工作。

enter image description here

1 个答案:

答案 0 :(得分:1)

在进行了一些澄清之后,看来所描述的表格的布局和行为类似于此示例配置:

WinForms Form嵌入在另一个Form中,并放置在Panel内。
该来宾Form被剥夺了TopLevel的纹章,并成为父项进入中央面板,如以下图形示例所示:

enter image description here

如何固定这些Panels以获得此布局:

绿色面板位于表单顶部。
DarkGray面板位于表单的左侧。
灰色面板占用了剩余空间。

  • 在Form容器中插入三个面板。
  • 绿色面板需要保持其位置,它永远不会改变:
    • 右键单击→SendToBack(!important :)。
    • Dock→顶部。
  • 暗灰色面板位于表单左侧的绿色面板下方。它需要在需要时调整自身大小,但绝不会覆盖绿色面板:
    • 停靠→左
  • 灰色面板需要占用剩余空间。它需要在需要时调整自身大小,但永远不会覆盖“绿色面板”或“深灰色面板”:
    • 右键单击→BringToFront(!important
    • Dock→中心

对接时优先级最高的元素分配给堆栈中Z顺序最低的元素:绿色面板,在此处。 优先级最低的元素分配给z顺序最高的元素:“灰色面板”,然后它将在所有其他优先级较高的元素(遵循z顺序)中收缩和拉伸

如何嵌入表格:

最简单的部分。这是我们项目中的一个表格,重新制作父级时无需执行任何魔术操作即可保持其生命力:
(这仅适用于1种表单。如果有更多表单,则需要List<Control>

之类的东西。
//Define here the Form which will be embedded
[Your Form Class] EmbeddedForm;

private void button1_Click(object sender, EventArgs e)
{
    EmbeddedForm = new [Your Form Class]() {
        TopLevel = false,
        Parent = panContainer,
        Location = new Point(4, 4),
        Enabled = true
    };
    EmbeddedForm.Show();
}

private void buttonShrink_Click(object sender, EventArgs e)
{
    //Maybe insert a classic dotted mini-button to re-inflate the sidebar when needed
    panelSideBar.Width = 6;
}

private void panelContainer_Resize(object sender, EventArgs e)
{
    Rectangle rect = panelContainer.ClientRectangle;
    rect.Inflate(-3, -3);
    EmbeddedForm.Size = rect.Size;
}

如果您允许容器面板AutoScroll的内容,则不需要Resize事件。

修改:
示例图形中Form的完整源代码的PasteBin: Embedded Forms