C# 通过方法创建新表单

C# 通过方法创建新表单,c#,forms,variables,methods,C#,Forms,Variables,Methods,我这里有一些代码。它用于检查应用程序中打开的表单,并确定表单是否已打开。现在我使用它是因为有几个表单我不想同时打开两次。我的问题是我无法打开我想要的表单类型。我想得到F的formtype并打开该特定类型的表单。例: public void IsOpen(Form f) { bool open = false; FormCollection fc = Application.OpenForms; foreach (Form form

我这里有一些代码。它用于检查应用程序中打开的表单,并确定表单是否已打开。现在我使用它是因为有几个表单我不想同时打开两次。我的问题是我无法打开我想要的表单类型。我想得到F的formtype并打开该特定类型的表单。例:

    public void IsOpen(Form f)
    {
        bool open = false;
        FormCollection fc = Application.OpenForms;
        foreach (Form form in fc)
        {
            if (form == f)
            {
                if (form.WindowState == FormWindowState.Minimized)
                {
                    form.WindowState = FormWindowState.Normal;
                }
                form.BringToFront();
                open = true;
            }
        }
        if (open == false)
        {
            f = new Form();
            f.Show();
        }
    }
我在这里传递形式,所以f应该等于设置形式。但是我需要动态打开不同表单的方法。假设我使用Form1而不是设置,如果Form1的实例未打开,我需要打开它。非常感谢您的帮助。

公共字典表单=新字典();
    private void mnuSettings_Click(object sender, EventArgs e)
    {
        Settings set = new Settings();
        IsOpen(set);
    }
public void OpenSingletonForm(),其中T:Form,new(){ if(!forms.ContainsKey(typeof(T)){ 添加(typeof(T),new T()); } 表格[typeof(T)].Show(); }
并像这样使用它:

public Dictionary<Type, Form> forms = new Dictionary<Type, Form>();

public void OpenSingletonForm<T>() where T : Form, new() {
  if (!forms.ContainsKey(typeof(T)) {
    forms.Add(typeof(T), new T());
  }
  forms[typeof(T)].Show();
}
OpenSingletonForm();

它的目的是检查应用程序中打开的表单,并确定表单是否已经打开。
嗯..您甚至不知道自己的函数在做什么…嗯,我似乎无法将新表单添加到字典中。它给出了一个错误“无法创建和引用变量t,因为它没有“new()”约束”。有什么想法吗?也感谢您的输入!更新后,请注意函数类型上的
new()
约束
T
谢谢,非常有效。感谢您的帮助!
OpenSingletonForm<SettingsDialog>();