【问题标题】:C# open Form in PanelC# 在面板中打开表单
【发布时间】:2021-03-30 17:44:58
【问题描述】:

我有 3 个表格。 Mainform、Form2 和 Form3。

主窗体包含一个大面板,程序启动时在其中显示窗体 2。

我在我的 Mainform 中使用以下代码来做到这一点,效果很好:

   private Boolean loaded = false;
   private void MainForm_Load(object sender, EventArgs e)
    {
        if (!loaded)
        {
            openChildForm(new Form2());
            loaded = true;
        }
    }

 
    public Form activeForm = null;
    public void openChildForm(Form childForm)
    {
        if (activeForm != null)
        { 
            activeForm.Close();
        }

        activeForm = childForm;
        childForm.TopLevel = false;
        panelMain.Controls.Add(childForm);
        panelMain.Tag = childForm;
        childForm.BringToFront();
        childForm.Show();
    }

现在我想在 Form2 中添加一个按钮(仍然显示在面板中)。 当我按下该按钮时,Form2 应从 Mainform 面板中删除,而 Form3 应显示在该 MainForm 面板中。我在 Buttonclick 的 Form2 中使用以下代码进行了尝试:

new Mainform().openChildForm(new Form3());

但是,这不起作用。它仍然在 Panel 中显示 Form2 而不显示 Panel3。 在 Mainform 中,它还说“activeForm”是“null”。我猜这是因为“new MainForm()”调用。我可以直接访问 MainForm 而不创建新实例吗?

【问题讨论】:

    标签: c# forms panel


    【解决方案1】:

    现在我想在 Form2 中添加一个按钮(它仍然显示在 小组)。当我按下那个按钮时,Form2 应该从 Mainform Panel 而不是 Form3 应该显示在那个 MainForm 面板。

    我可以直接访问 MainForm 而不创建新实例吗?

    在 Form2 中,您可以将 ParentForm 属性强制转换为 MainForm,然后调用 openChildForm() 反对:

    // ... in Form2 ...
    private void button1_Click(object sender, EventArgs e)
    {
        MainForm mf = this.ParentForm as MainForm;
        if (mf != null)
        {
            mf.openChildForm(new Form3());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 2015-05-02
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多