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

C# 如果表单已在c中打开,如何关闭表单#,c#,forms,C#,Forms,我正试图一次打开一张表格。如果用户试图在一个表单已打开时打开另一个表单,则不应打开该表单 我的代码: else if (instrument_name == "Micrometer") { this.Hide(); Form2 f2 = new Form2(); f2.ShowDialog(); this.readclose() } 仅当此表单尚未打开时,才会打开表单2 解决办法可以是: Form fc = Application.OpenForms["Upda

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

我的代码:

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\u Load
放进去,那么很明显,即使是第一次,它也不会包含null


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

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


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

你可以用不同的方法。但其中之一是实现单音模式。为此,您必须按以下方式修改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()

你试过搜索吗?请保留对表单的引用。
ShowDialog
blocks。对不起,您可以吗elaborate@DanieA. WhiteTry使Form2成为全局变量是否有任何类似按钮的控件来打开第二个form?如果能对我的答案有任何回应,那就太好了。这能解决你的问题吗?是的,不是,可能是吗?