我有一个带有面板的Windows窗体。此表单包含三个面板。一个面板是可折叠的,并用作侧边栏,另一个面板位于顶部,用于显示标题,最后一个是通过单击面板之一中要处理的一项来打开表单的占位符。 >
现在我要做的是根据占位符面板的状态调整占位符面板的大小(仅宽度)(仅宽度)和在面板上打开的窗体的大小,可以将其扩展或崩溃了。扩展坞无法正常工作。
答案 0 :(得分:1)
在进行了一些澄清之后,看来所描述的表格的布局和行为类似于此示例配置:
WinForms
Form
被嵌入在另一个Form
中,并放置在Panel
内。
该来宾Form
被剥夺了TopLevel
的纹章,并成为父项进入中央面板,如以下图形示例所示:
如何固定这些Panels
以获得此布局:
绿色面板位于表单顶部。
DarkGray面板位于表单的左侧。
灰色面板占用了剩余空间。
!important
:)。!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
事件。
修改:
示例图形中Form的完整源代码的PasteBin:
Embedded Forms