如果已在c#中打开表单,如何关闭表单

时间:2016-07-29 10:51:50

标签: c# forms

我正试图一次打开一张表格。如果用户在一个表单已打开时尝试打开另一个表单,则不应该打开它。

我的代码:

else if (instrument_name == "Micrometer")
{
    this.Hide();
    Form2 f2 = new Form2();
    f2.ShowDialog();
    this.readclose()
}

此处仅在未打开此表单时才打开表单2.

解决方案可能是:

Form fc = Application.OpenForms["UpdateWindow"]; 

if (fc != null) 
   fc.Close(); 

fm.Show();

但我不知道我应该在哪里写这个,因为如果我把它Form1_Load,那么显然即使是第一次它也不会包含null。

我应该把它放在程序文件中吗?

2 个答案:

答案 0 :(得分:0)

您可以创建类似'表单管理器'的smth,它将监视所有打开的表单。 在表单关闭的情况下,管理器打开它,否则重新打开它。

此解决方案与您的解决方案类似,但在这种情况下,所有逻辑都集中在一个地方,易于理解或维护。

答案 1 :(得分:0)

你可以采用不同的方式。但其中一个是实现单线模式。为此,您必须通过以下方式修改Form2:

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

    public static Form2 GetForm2Instance()
    {
        if(Instance==null) Instance = new Form2();
        return Instance;

    }

    public static void CloseOldForm2AndOpenNewForm2()
    {
        if (Instance != null) Instance.Close();
        Instance = new Form2();
        Instance.Show();
    }

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        Instance = null;
    }
}

正如您所看到的,Form2()是私有的。要加载表单,您必须使用以下代码:

 //Case 1 if you porefer to use existing instance of the Form2
 Form2 myForm = Form2.GetForm2Instance();
 myForm.Show();


 //Case 2 if you prefer to close old one and create a new Form2
 Form2.CloseOldForm2AndOpenNewForm2()