按方法创建新表单

时间:2013-12-07 01:14:00

标签: c# forms variables methods

    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的formtype并打开该特定类型的表单。例如:

    private void mnuSettings_Click(object sender, EventArgs e)
    {
        Settings set = new Settings();
        IsOpen(set);
    }

所以我在这里传递表格,所以f应该等于设置表格。但我需要这种方法来动态打开不同的表单。所以说我使用Form1而不是设置,如果它没有打开,我需要打开Form1的一个实例。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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