在C#中,当我单击第二个窗体的按钮时,如何在第一个窗体内打开第三个窗体

在C#中,当我单击第二个窗体的按钮时,如何在第一个窗体内打开第三个窗体,c#,.net,visual-studio,winforms,C#,.net,Visual Studio,Winforms,在我的Windows窗体应用程序中,我有3个不同的Forms(Form1、Form2、Form3) 表单1包含一个按钮和一个面板(按钮1,面板1) 表单2仅包含一个按钮(按钮) 表单3不包含任何内容 在Form1中,当我单击按钮1时,Form2将在panel1中打开 private void button1_Click(object sender, EventArgs e) { panel1.Controls.Clear(); Form2 f2 = new Form2(

在我的
Windows窗体
应用程序中,我有3个不同的
Form
s(Form1、Form2、Form3)

  • 表单1包含一个按钮和一个面板(按钮1,面板1)

  • 表单2仅包含一个按钮(按钮)

  • 表单3不包含任何内容

在Form1中,当我单击按钮1时,Form2将在panel1中打开

private void button1_Click(object sender, EventArgs e)
{
    panel1.Controls.Clear();
    Form2 f2 = new Form2();
    f2.TopLevel = false;
    panel1.Controls.Add(f2);
    f2.Dock = DockStyle.Fill;
    f2.Show();
}

现在,在Form2内部,当我单击按钮时,我想在Form1的面板中打开Form3,我已经尝试了以下代码…

Form1 f1 = new Form1();
private void button1_Click(object sender, EventArgs e)
{
    f1.panel1.Controls.Clear();
    Form3 f3 = new Form3();
    f3.TopLevel = false;
    f1.panel1.Controls.Add(f3);
    f3.Dock = DockStyle.Fill;
    f3.Show();
}

注意:在表单1中,我已将面板的修改器更改为public步骤1:在表单1中创建函数以显示其他表单:

class Form1
{
    public void ShowForm2() {...}
    public void ShowForm3() {...}
    // TODO: think about: do you need IsForm2Shown?
    // TODO: think about what you want if ShowForm2 is called twice
    ...
}

第二步:让Form2了解Form1。给Form2一个函数,在Form1中显示Form3

class Form2
{
    public Form1 Form1 {get; set;}

    protected void ShowForm3InsideForm1()
    {
        this.Form1.ShowForm3();
    }
}
每当Form one创建Form2时,它都应该填充属性
Form1
。所以在
Form1.ShowForm2()中

第3步:每当你在表格2中发现你想“在表格1中显示表格3”,只要调用适当的函数即可

// Somewhere inside Form2 code you decide that you want to show Form3 inside Form1:
this.ShowForm3InsideForm1();

简单的问候

问题是什么?它不起作用吗?它会崩溃吗?仅从你所写的内容就不清楚了。“我已经试过这个代码了…”还有…什么?你没有提到这个问题。(提示:“它不工作”并不是我们在这里寻找的答案…更多的调试工作会有所帮助)另外,将表单控件添加到另一个面板有点奇怪…为什么不像平常一样打开和关闭表单呢?这:
f1.panel1.controls.Clear()和这个:
panel1.Controls.Clear()组合将成为应用程序的结尾。阅读有关用户控件的信息。将表单替换为某些自定义对象。很抱歉答复太晚。。。我的代码不起作用。。我试过很多次了。。
// Somewhere inside Form2 code you decide that you want to show Form3 inside Form1:
this.ShowForm3InsideForm1();