目的要寫的是如何将窗體(Form)添加到panel中。
為什麼要這樣呢?
1)如果用tab控件,整個窗體的控件太多,不易于我們程式設計;
2)可以更靈活的控制窗體的布局。
我想你一定看過這樣的配制資訊窗體吧(迅雷的配置頁面)。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmL2gjM581N2gTO0YDOzMTMvwlMw8CX2AjMxAjMvw1ckF2bsBXdvwFdl5mLuR2cj5Set1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
在你的項目開發中,是否也希望做出這種效果呢?
應該如何設定呢?
單擊窗體的左邊的按鈕,窗體右邊的内容會根據單擊的按鈕變化.
開始是想到的設定思路很簡單,主窗體(如上圖),右邊放置一個Panel控件.
然後根據單擊的按鈕将子窗體顯示在Panel控件上.
在按鈕的單擊事件中加入下面的代碼:
在按鈕的單擊事件中加入下面的代碼:
private void button1_Click(object sender, EventArgs e)
{
ChildForm child = new ChildForm();
this.panel1.Controls.Add(child);
child.Show();
}
運作程式
顯示“不能将頂級控件添加到一個控件上”出現“不能将頂級控件添加到一個控件上”錯誤怎麼處理?
在代碼中加入
child.TopLevel = false;
OK.
新問題又出現了.我們不希望子窗體的标題和邊筐也顯示在父窗體中,再添加如下代碼.
child.FormBorderStyle = FormBorderStyle.None;
現在的感覺是不是舒服多了.
但是還隐藏着一個新問題.怎樣動态設定子窗體的Size、Location等呢?
我希望在調整父窗體大小時,Panel1 中子窗體的大小也跟随動态自動調整 .
需要加入下面的事件
private void panel1_Resize(object sender, System.EventArgs e)
{
try
{
this.child.ClientSize = new System.Drawing.Size(panel1.Size.Width, panel1.Size.Height);
}
catch(System.Exception Er)
{
MessageBox.Show(Er.ToString());
}
}
編譯無錯,執行時(Error: 未将對象引用設定到對象的執行個體)
但連續點了4個一樣的錯誤提示确認後,程式卻可以正常執行,并且form1調整窗體大小form2也可以随之響應了。
此計不行,又生一計.
我們可以把子窗體當成一個控件,設定Dock屬性不就行了嗎?
趕快測試一下:
private void button1_Click(object sender, EventArgs e)
{
ChildForm child = new ChildForm();
child.TopLevel = false;
child.Dock = System.Windows.Forms.DockStyle.Fill;
child.FormBorderStyle = FormBorderStyle.None;
//child.Parent = this.panel1;
this.panel1.Controls.Add(child);
child.Show();
}
OK
這是我第一次寫關于技術的文章.希望大家多多支援.
本人文筆不好,多多包含.