天天看點

在主窗體Panel中添加新的窗體(C#,winform開發) 設定

目的要寫的是如何将窗體(Form)添加到panel中。

為什麼要這樣呢?

1)如果用tab控件,整個窗體的控件太多,不易于我們程式設計;

2)可以更靈活的控制窗體的布局。

我想你一定看過這樣的配制資訊窗體吧(迅雷的配置頁面)。

在主窗體Panel中添加新的窗體(C#,winform開發) 設定

在你的項目開發中,是否也希望做出這種效果呢?

應該如何設定呢?

單擊窗體的左邊的按鈕,窗體右邊的内容會根據單擊的按鈕變化.

開始是想到的設定思路很簡單,主窗體(如上圖),右邊放置一個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

這是我第一次寫關于技術的文章.希望大家多多支援.

本人文筆不好,多多包含.