C# 打开一个通用表单

C# 打开一个通用表单,c#,generics,typeof,C#,Generics,Typeof,我想要一个方法,只能发送表单类型来打开,然后打开该表单 这就是我到目前为止所做的: private void OpenForm(Type t) { if (OpenedForm != null) { OpenedForm.Close(); } IList list = (IList)Activator.CreateInstance( typeof(List<>).MakeGenericType(t));

我想要一个方法,只能发送表单类型来打开,然后打开该表单

这就是我到目前为止所做的:

private void OpenForm(Type t)
{
    if (OpenedForm != null)
    {
        OpenedForm.Close();
    }
        IList list = (IList)Activator.CreateInstance(
        typeof(List<>).MakeGenericType(t));
        OpenedForm.MdiParent = this;
        OpenedForm.Show();
        OpenedForm.WindowState = FormWindowState.Maximized;
}
然后简单地这样称呼它:

 Form newform = new TestForm();
 OpenForm(newform);
但我很想知道是否有可能像我在第一个代码片段中尝试的那样完成它,以及需要做些什么来实现这一点

private void OpenForm(Type t)
{
    if(!typeof(Form).IsAssignableFrom(t))
        throw new ArgumentException("Required description of Form Type", "t");

    if (OpenedForm != null)
       OpenedForm.Dispose(); //will also close a Form

    OpenedForm = (Form)Activator.CreateInstance(t);
    OpenedForm.Show();
    OpenedForm.WindowState = FormWindowState.Maximized;
}
现在您只能传递
Form
类或其派生类的
Type
元数据。因此,如果你这样做:

OpenForm(typeof(Form));
将创建并打开一个新的空表单

OpenForm(typeof(Form));