本文的要寫的是如何将窗體(Form)添加到panel中。 為什麼要這樣呢? 1)如果用tab控件,整個窗體的控件太多,不易于我們程式設計; 2)可以更靈活的控制窗體的布局。 我想你一定看過這樣的配制資訊窗體吧(迅雷的配置頁面)。 ![]() 在你的項目開發中,是否也希望做出這種效果呢? 應該如何設定呢? 單擊窗體的左邊的按鈕,窗體右邊的内容會根據單擊的按鈕變化. 開始是想到的設定思路很簡單,主窗體(如上圖),右邊放置一個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 這是我第一次寫關于技術的文章.希望大家多多支援. 本人文筆不好,多多包含. |