C# 表单不会完全关闭,也不会无故打开

C# 表单不会完全关闭,也不会无故打开,c#,C#,我的程序有两个表单和代码,当我启动另一个表单时只隐藏表单1,当我启动表单1时隐藏表单2。 但这不会发生,表单也不会隐藏它们只是重新开始。 我在每个窗体中放置了两个按钮,当您单击第一个窗体上的按钮时,第一个窗体将隐藏,第二个窗体将显示;当您单击第二个窗体中的按钮时,将隐藏并显示第一个窗体。 我能做到,而且效果很好。 但你们可以从图中看出我的问题。 你可以在我上传的图片中看到我在说什么 这是我在表格1的按钮1中的代码: private void btnMigrate_Click(objec

我的程序有两个表单和代码,当我启动另一个表单时只隐藏表单1,当我启动表单1时隐藏表单2。 但这不会发生,表单也不会隐藏它们只是重新开始。 我在每个窗体中放置了两个按钮,当您单击第一个窗体上的按钮时,第一个窗体将隐藏,第二个窗体将显示;当您单击第二个窗体中的按钮时,将隐藏并显示第一个窗体。 我能做到,而且效果很好。 但你们可以从图中看出我的问题。 你可以在我上传的图片中看到我在说什么

这是我在表格1的按钮1中的代码:

    private void btnMigrate_Click(object sender, EventArgs e)
    {
        Form2 f2 =new Form2();
        f2.Show(); // Shows Form2
    }
这是我在表单2中按钮2中的代码:

    private void btnMigrate_Click(object sender, EventArgs e)
    {
                Form1 f1 = new Form1(); // Instantiate a Form3 object.
                f1.Show(); // Show Form3 and
                this.Close();
    }
我可以解决一个表格,表格2没有结果就不能打开。 但当我用button1表单1编写代码时:

 this.Close(); 
在我点击表单2中的按钮2后,应用程序关闭并且不会显示表单


我把密码

public Form1 f1 { get; set; }
表格二及

public Form2 f2 { get; set; }
在表格1中

但我还有这个问题。。。 错误显示“f2”在当前上下文中不存在


这是一个有方法的类:(表2)

表格1:

private void btnMigrate_Click(object sender, EventArgs e)

这正是我一直在寻找的。 非常感谢


我的问题解决了。

您需要将引用从一个表单添加到另一个表单,以便可以从另一个表单更改一个表单的属性。然后,在button_click事件中,您不需要每次都创建另一个窗体的新实例,但必须检查引用f1/f2中的窗体是否在创建之前未创建或已释放(仅在这种情况下,您需要创建窗体),然后显示另一个窗体并隐藏(但不关闭)当前窗体:

表格1类别:

public partial class Form1 : Form
{
    public Form2 f2 { get; set; }

    public Form1()
    {
        InitializeComponent();
    }

    private void btnMigrate_Click(object sender, EventArgs e)
    {
        if (this.f2 == null || this.f2.IsDisposed == true)
        {
            this.f2 = new Form2();
            this.f2.f1 = this;
        }
        f2.Show();
        this.Hide();
    }
}
表格2类别:

public partial class Form2 : Form
    {
        public Form1 f1 { get; set; }

        public Form2()
        {
            InitializeComponent();
        }

        private void btnMigrate_Click(object sender, EventArgs e)
        {
            if (this.f1 == null || this.f1.IsDisposed == true)
            {
                this.f1 = new Form1();
                this.f1.f2 = this;
            }
            f1.Show();
            this.Hide();

        }
    }

如果您提供了一些codecan,那么就更容易提供帮助了。您可以向我们展示具有f1属性的Form1类,其中只有一个方法-btnMigrate_Click(),以及具有f2属性且具有相同方法的Form2类?请参阅我的答案编辑。这就是类和方法的外观。
public partial class Form2 : Form
    {
        public Form1 f1 { get; set; }

        public Form2()
        {
            InitializeComponent();
        }

        private void btnMigrate_Click(object sender, EventArgs e)
        {
            if (this.f1 == null || this.f1.IsDisposed == true)
            {
                this.f1 = new Form1();
                this.f1.f2 = this;
            }
            f1.Show();
            this.Hide();

        }
    }