为了账号安全,请及时绑定邮箱和手机立即绑定

自动调整在面板上呈现的多个表单的大小

自动调整在面板上呈现的多个表单的大小

C#
杨__羊羊 2021-10-23 16:26:48
我有这个带有面板的表格。这个表格有三个面板。一个面板是可折叠的并充当侧边栏,另一个位于顶部并用于显示标题,最后一个是通过单击面板一中提供的项目之一打开的表单的占位符。现在我想要做的是根据面板一的状态调整(扩大和缩小)占位符面板的大小(仅宽度)和在面板上打开的表单,可以展开或折叠。扩展坞不工作。
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

经过一些澄清后,所描述的表单的所需布局和行为似乎类似于此示例配置:

WinForms Form嵌入在另一个Form,并放置内Panel
这个 GuestForm被剥夺了它的TopLevel徽章并成为中央面板的父级,如下图所示:

//img1.sycdn.imooc.com//6173c76e0001099e03290212.jpg

您如何停靠这些Panels以获得此布局:

绿色面板停留在表格的顶部。
深灰面板铺设在表的左侧。
灰色面板占据的剩余空间。

  • 在表单容器上插入三个面板。

  • 绿色面板需要保持它的位置,它永远不会改变:

    • 右键单击 → SendToBack ( !important:)。

    • 停靠→顶部。

  • 深灰面板被定位在绿色面板下面,在表的左侧。它需要在需要时调整自己的大小,但永远不会覆盖绿色面板:

    • 停靠→左

  • 灰色面板需要占用的剩余空间。它需要在需要时调整自己的大小,但它永远不会覆盖绿色面板或深灰色面板:

    • 右键单击→BringToFront ( !important)

    • 码头 → 中心

对接时的最高优先级分配给堆栈中具有最低 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则不需要该事件。


查看完整回答
反对 回复 2021-10-23
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信