天天看點

C#在Panel中添加新的窗體(Form)

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

為什麼要這樣呢?

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

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

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

C#在Panel中添加新的窗體(Form)

在你的項目開發中,是否也希望做出這種效果呢? 應該如何設定呢? 單擊窗體的左邊的按鈕,窗體右邊的内容會根據單擊的按鈕變化. 開始是想到的設定思路很簡單,主窗體(如上圖),右邊放置一個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 這是我第一次寫關于技術的文章.希望大家多多支援. 本人文筆不好,多多包含.