1 回答
TA贡献1895条经验 获得超3个赞
经过一些澄清后,所描述的表单的所需布局和行为似乎类似于此示例配置:
阿WinForms
Form
被嵌入在另一个Form
,并放置内Panel
。
这个 GuestForm
被剥夺了它的TopLevel
徽章并成为中央面板的父级,如下图所示:
您如何停靠这些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则不需要该事件。
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报