1. 程式人生 > >c# panel裡面嵌入窗體

c# panel裡面嵌入窗體

現有一個父窗體name是Parent,子窗體name是Son,要讓Son嵌入在Parent的Panel內,則父窗體的初始載入程式碼如下:
private void Parent_Load(object sender, System.EventArgs e){this.IsMdiContainer=true;//設定父窗體是容器
Son mySon=new Son();//例項化子窗體
mySon.MdiParent=this;//設定窗體的父子關係
mySon.Parent=pnl1;//設定子窗體的容器為父窗體中的Panel
mySon.Show();//顯示子窗體,此句很重要,否則子窗體不會顯示}

今天在做專案
時候遇到一個問題,窗體分為左右兩部分,要求在左邊欄點選按鈕時,右邊動態載入窗體
最後想到用panel實現,經歷幾次失敗,並查詢資料後,終於搞定

說明:如果多次切換需加入 panel.clear();清空原有panel內容
環境:C# VS2008 

方法一:通過給panel載入子元素實現
Form2 form =
new Form2();
form.FormBorderStyle = FormBorderStyle.None; //隱藏子窗體邊框(去除最小花,最大化,關閉等按鈕)
form.TopLevel =
false; //指示子窗體非頂級窗體
this.panel1.Controls.Add(form);//將子窗體載入panel

form.Show();


方法二:指定父容器實現
Form2 form=new Form2();
form.MdiParent=this;//指定當前窗體為頂級Mdi窗體
form.Parent=this.Panel1;//指定子窗體的父容器為
Frm.FormBorderStyle = FormBorderStyle.None;//隱藏子窗體邊框,當然也可以在子窗體的窗體載入事件中實現

panelform.Show();

實際上你把窗體加入了panel,那麼這個窗體已經只是個控制元件了,和普通的textbox控制元件沒什麼兩樣,那麼你能告訴我如何關閉panel中的textbox控制元件嗎,好像沒這麼一說,因此,實際上關閉panel的中子窗體(form),就是從panel中移除子窗體form:程式碼如下:



Form2 form = new Form2();//要宣告為成員變數哦
//新增進panel的按鈕,你應該已經實現了
private void button1_Click_1(object sender, EventArgs e)
{
    form.TopLevel = false;//這就是使你窗體變控制元件的一步
    form.Dock = DockStyle.Fill;
    form.FormBorderStyle = FormBorderStyle.None;
    form.Parent = panel1;//你panel的id
    form.Show(); 
}
//關閉panel中子窗體的按鈕
private void button2_Click(object sender, EventArgs e)
{
    panel1.Controls.Remove(form);//其實就是一個控制元件的移除
}

  1. privatevoid 話術管理ToolStripMenuItem_Click(object sender, EventArgs e)  
  2. {  
  3.     FormScripts formscripts = new FormScripts();  
  4.     formscripts.TopLevel = false;  
  5.     formscripts.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;  
  6.     formscripts.Dock = DockStyle.Fill;  
  7.     formscripts.Parent = this.panel1;  
  8.     //formscr

  1. privatevoid 話術管理ToolStripMenuItem_Click(object sender, EventArgs e)  
  2. {  
  3.     FormScripts formscripts = new FormScripts();  
  4.     formscripts.TopLevel = false;  
  5.     formscripts.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;  
  6.     formscripts.Dock = DockStyle.Fill;  
  7.     formscripts.Parent = this.panel1;  
  8.     //formscripts.MdiParent = this;//直接彈出一個新窗體
  9.     formscripts.Show();  
  10.     formscripts.BringToFront();//如果需要在panel1裡面顯示不同的窗體,就要加這句,這樣在切換panel1裡面顯示的窗體時,窗體才能顯示出來
  11. }  

現有一個父窗體name是Parent,子窗體name是Son,要讓Son嵌入在Parent的Panel內,則父窗體的初始載入程式碼如下:
private void Parent_Load(object sender, System.EventArgs e)
  {
   this.IsMdiContainer=true;//設定父窗體是容器
   Son mySon=new Son();//例項化子窗體
   mySon.MdiParent=this;//設定窗體的父子關係
   mySon.Parent=pnl1;//設定子窗體的容器為父窗體中的Panel
   mySon.Show();//顯示子窗體,此句很重要,否則子窗體不會顯示
  }