【问题标题】:open a form in a panel from a form inside that panel从面板内的表单打开面板中的表单
【发布时间】:2015-05-02 20:39:11
【问题描述】:

我想在面板中打开一个表单,但我想从该面板中已经存在的表单中打开该表单。 示例:我的面板名称是 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();

}

那么如何将新表单添加到另一个表单内的面板并关闭当前表单

【问题讨论】:

  • 当您关闭父窗体时,它的所有子窗体也将关闭,因此您要么只需要在 form3 持续存在时隐藏 form2,要么只将 form2 设为面板的子窗体
  • 那么如何隐藏form2然后显示form3
  • @TaW TopLevel false 可以。同意,不一定推荐。
  • 哇,拉斯,你是对的。总是有更多的东西要学习..

标签: c# forms panel


【解决方案1】:

首先处理面板中的所有内容,并且不要致电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(),因为这只会关闭该表单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2016-03-20
    • 2010-12-01
    相关资源
    最近更新 更多