3表格,关闭第2和第3开放

时间:2016-04-22 02:45:54

标签: c# winforms

我有3个表格

//Example:
public Form 1;
public Form 2;
public Form 3;

当我开始我的程序时,它在Form1中。 我从Form1

打开Form2
Form2 f2 = new Form2();
this.Hide() //Save in memory
f2.ShowDialog();
this.Show();

所以在Form2中。我打开form3

Form2 f3 = new Form2();
this.Close() //Trying Destroy Form2 and open Form3.
f3.ShowDialog();
this.Show(); 

最后,我想从Form3打开新的Form2(重新加载所有数据) 但我没有这样做。如何解决?

3 个答案:

答案 0 :(得分:0)

调用this.Show()后你无法调用f3.ShowDialog(),因为ShowDialog()会打开一个模块窗口,阻止所有其他UI线程,因此跟随它的任何语句都不会被执行,直到模态窗口关闭。

答案 1 :(得分:0)

您没有说明您使用的数据源或更新第二张表格的方式。我个人会根据第一个表单使用对话框结果值来确定是否重新加载第二个表单。

这样的事情:

<强> Form1中

public partial class Form1 : Form
{
    Form2 f2;
    Form3 f3;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        f2 = new Form2();
        f2.FormClosing += F2_FormClosing;
        this.Hide();
        f2.Show();
    }

    private void F2_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (((Form2)sender).DialogResult == DialogResult.OK)
        {
            f3 = new Form3();
            f3.FormClosing += F3_FormClosing;
            f3.Show();
        }
        else
        {
            this.Visible = true;
        }

    }

    private void F3_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (((Form3)sender).DialogResult == DialogResult.OK)
        {
            f2 = new Form2();
            f2.FormClosing += F2_FormClosing;
            f2.Show();
        }
        else
        {
            this.Visible = true;
        }
    }
}

<强>窗体2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.OK;
        this.Close();
    }
}

<强> Form3

public partial class Form3 : Form
{
    string myData;
    public Form3()
    {
        InitializeComponent();
    }
    public string getData
    {
        get
        {
            return myData;
        }
        set
        {
            myData = value;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.OK;
        this.Close();
    }
}

答案 2 :(得分:0)

应该是,

表格2

Form3 f3 = new Form3();
f3.show(); //shouldn't use ShowDialog since it will block the thread
this.close();

在表单3中,只需创建一个Form2的新实例并根据需要显示它。

Form2 f2 = new Form2();
f2.showDialog();