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 關注
- 165 瀏覽
添加回答
舉報