从该面板内的表单打开面板中的表单

时间:2015-03-02 13:16:42

标签: c# forms panel

我想在面板中打开一个表单,但我想从已经在该面板中的表单中打开该表单。 示例:我的面板名称是面板,我有3个表单,form1,form2,form3。

        panel.Controls.Clear();
        form2 myForm = new form2();
        myForm.FormBorderStyle = FormBorderStyle.None;
        myForm.TopLevel = false;
        myForm.AutoScroll = true;
        panel.Controls.Add(myForm);
        myForm.Show();

现在我想用form2

中的按钮打开form3
private void button_Click(object sender, EventArgs e){
        form3 myForm = new form3();
        myForm.FormBorderStyle = FormBorderStyle.None;
        myForm.TopLevel = false;
        myForm.AutoScroll = true;
        panel.Controls.Add(myForm);
        myForm.Show();
        this.close();

}

那么如何在其他表单中的面板中添加新表单并关闭当前表单

1 个答案:

答案 0 :(得分:2)

首先处理面板中的所有内容,调用this.Close();(这将关闭您当前的表单):

private void button_Click(object sender, EventArgs e){
  Panel p = this.Parent as Panel;

  if (p != null) {
    while (panel.Controls.Count > 0) {
      panel.Controls[0].Dispose();
    }

    form3 myForm = new form3();
    myForm.FormBorderStyle = FormBorderStyle.None;
    myForm.TopLevel = false;
    myForm.AutoScroll = true;
    panel.Controls.Add(myForm);
    myForm.Show();
    // this.Close();
  }
}

调用panel.Clear();不会丢弃控件,如果您继续添加和清除表单和控件而不处理它们,则可能会造成内存泄漏。

编辑:

再次重新阅读您的问题后,您需要引用父属性以获取当前面板:

Panel p = this.Parent as Panel;
if (p != null) {
  form3 myForm = new form3();
  myForm.FormBorderStyle = FormBorderStyle.None;
  myForm.TopLevel = false;
  myForm.AutoScroll = true;
  p.Controls.Add(myForm);
  myForm.Show();
  this.Close();
}

在这种情况下,是的,您可以从Form2调用this.Close(),因为这只会关闭该表单。