表格无法完全关闭并且无任何理由

时间:2016-03-03 12:27:37

标签: c#

当我开始另一个表单时,我的程序有两个表单和代码,只需隐藏表单1,当我开始表单1隐藏表单2时。 但这不会发生,形式也不会隐藏它们只是重新开始。 我在每个表单中放置了2个按钮,当您单击第一个表单上的按钮时,第一个表单将隐藏,第二个表单将显示,当您单击第二个表单中的按钮时,隐藏它并显示第一个表单。 我能做到,它工作正常。 但你可以在图片中看到我的问题。 你可以在我上传的图片中看到我在说什么

You can see my problem

这是我在Button1中的代码形式1:

    private void btnMigrate_Click(object sender, EventArgs e)
    {
        Form2 f2 =new Form2();
        f2.Show(); // Shows Form2
    }

这是我在Form 2中的Button2中的代码:

    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; }

表格2和

public Form2 f2 { get; set; }

表格1。

但我还有那个问题...... 错误显示当前上下文中不存在'f2'。

这是类方法:(表格2)

 private void btnMigrate_Click(object sender, EventArgs e)

表格1:

private void btnMigrate_Click(object sender, EventArgs e)

这正是我所寻找的。 非常感谢VDN。

我的问题解决了。

1 个答案:

答案 0 :(得分:0)

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

Form1类:

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();
    }
}

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();

        }
    }