2014-02-12 117 views
0

我需要一些帮助子窗体控件:使用主窗体和子窗体的面板控件

我正在开发一个C#窗体窗体。表格分为两个面板。左侧面板包含多个按钮,右侧面板用于显示不同的形式。

因此,当您单击左侧面板上的按钮时,相应的窗体将显示在右侧面板上。 例如Button1:ShowForm1,Button2:ShowForm2,Button3:ShowForm3

我能够实现上述情况。但是,我不知道如何实现以下情况: 单击ShowForm3以显示Form3,然后在Form3中有一个“ShowForm4”按钮。如果按钮被点击,那么form3应该被关闭并且Form4应该被显示在面板中。 我想让Form4在面板中显示,而不仅仅是一个弹出窗体(即Form4.show())。 我该怎么做?谢谢。

我的编码如下:

private void MainForm_Load(object sender, EventArgs e) 
    { 
     //Master Form 
     this.btn_show1.Click += new EventHandler(btn_show_Click); 
     this.btn_show2.Click += new EventHandler(btn_show_Click); 
     this.btn_show3.Click += new EventHandler(btn_show_Click); 
    } 

    void btn_show_Click(object sender, EventArgs e) 
    { 
     this.pnl_ShowForms.Controls.Clear(); 
     int tag = Convert.ToInt32((sender as Button).Tag); 
     switch (tag) 
     { 
      case 1: 
       Form1 frm1 = new Form1();     
       frm1.FormBorderStyle = FormBorderStyle.None; 
       frm1.Dock = DockStyle.Fill; 
       frm1.WindowState = FormWindowState.Maximized; 
       frm1.TopLevel = false; 
       this.pnl_ShowForms.Controls.Add(frm1); 
       frm1.Show(); 
       break; 
      case 2: 
       Form2 frm2 = new Form2(); 
       frm2.FormBorderStyle = FormBorderStyle.None; 
       frm2.Dock = DockStyle.Bottom; 
       frm2.WindowState = FormWindowState.Maximized; 
       frm2.TopLevel = false; 
       this.pnl_ShowForms.Controls.Add(frm2); 
       frm2.Show(); 
       break; 
      case 3: 
       Form3 frm3 = new Form3(); 
       frm3.FormBorderStyle = FormBorderStyle.None; 
       frm3.Dock = DockStyle.Fill; 
       frm3.WindowState = FormWindowState.Maximized; 
       frm3.TopLevel = false; 
       this.pnl_ShowForms.Controls.Add(frm3); 
       frm3.Show(); 
       break; 
     } 

回答

0

你会使用this.parent得到Panel。在Form3的Button_Click事件中写下面的代码。

void btn_Click(object sender, EventArgs e) 
{ 
    Panel mPanel = (Panel)this.Parent; 
    this.Close(); 
    Form4 frm1 = new Form4(); 
    frm1.FormBorderStyle = FormBorderStyle.None; 
    frm1.Dock = DockStyle.Fill; 
    frm1.WindowState = FormWindowState.Maximized; 
    frm1.TopLevel = false; 
    mPanel.Controls.Add(frm1); 
    frm1.Show(); 
} 
+0

谢谢。它工作完美。 – Alvin