C# 动态初始化windows窗体对象

C# 动态初始化windows窗体对象,c#,winforms,C#,Winforms,如何动态初始化win表单。在我的应用程序中,我有很多表单,比如超过50个,下面的代码重复了很多次 所以我想为它创建一些函数并完成这项工作。但是如何创建特定表单的new()实例。 任何帮助都将不胜感激 private void ShowForm(object frm) { if (frm == null || frm.IsDisposed) { frm = new <<Here is some Class Name>> { MdiParent

如何动态初始化win表单。在我的应用程序中,我有很多表单,比如超过50个,下面的代码重复了很多次

所以我想为它创建一些函数并完成这项工作。但是如何创建特定表单的
new()实例

任何帮助都将不胜感激

private void ShowForm(object frm)
{
    if (frm == null || frm.IsDisposed)
    {
        frm = new <<Here is some Class Name>> { MdiParent = this };
        frm.Show();
        frm.WindowState = FormWindowState.Maximized;
    }
    else
    {
        frm.Activate();
    }
 }
private void ShowForm(对象frm)
{
如果(frm==null | | frm.IsDisposed)
{
frm=new{MdiParent=this};
frm.Show();
frm.WindowState=FormWindowState.Maximized;
}
其他的
{
frm.Activate();
}
}

如果您知道要使用的
类型,则可以使用
Activator.CreateInstance

private void ShowForm(Form form, Type type)
{
    if (form == null || form.IsDisposed)
    {
        form = (Form) Activator.CreateInstance(type);
        form.MdiParent = this;
        form.Show();
        form.WindowState = FormWindowState.Maximized;
    }
    else
    {
        form.Activate();
    }
}
或者,如果您从不同的地方调用它,并且在编译时知道要使用哪种类型:

private void ShowForm<T>(T form) where T : Form, new()
{
    if (form == null || form.IsDisposed)
    {
        form = new T();
        form.MdiParent = this;
        form.Show();
        form.WindowState = FormWindowState.Maximized;
    }
    else
    {
        form.Activate();
    }
}
private void ShowForm(T form),其中T:form,new()
{
if(form==null | | form.IsDisposed)
{
form=新的T();
form.MdiParent=此;
form.Show();
form.WindowState=FormWindowState.Maximized;
}
其他的
{
form.Activate();
}
}

您可以使用反射

使用激活剂:

var form = System.Activator.CreateInstance(Type.GetType(yourclassname)), null) as Form;
form.ShowDialog();

使用泛型的功能:

    private void ShowForm<T>(T frm) where T : Form
    {
        if (frm == null || frm.IsDisposed)
        {
            frm = new T { MdiParent = this };
            frm.Show();
            frm.WindowState = FormWindowState.Maximized;
        }
        else
        {
            frm.Activate();
        }
    }
private void ShowForm(T frm),其中T:Form
{
如果(frm==null | | frm.IsDisposed)
{
frm=新T{MdiParent=this};
frm.Show();
frm.WindowState=FormWindowState.Maximized;
}
其他的
{
frm.Activate();
}
}

那么,您是如何决定使用哪种表单的?我是否可以传递该表单的类型并作出决定?当然可以。因此,您有一个
Type
对象用于它?Type t=新类型(typeOf(MyForm));我可以使用它并将其传递到我的函数中吗?这里不需要
new Type()
,只要
typeof(MyForm)
。但如果你在编译时知道,你可以用泛型来代替。我得到了答案。谢谢乔恩·斯基特。这很有帮助!Jon,为什么我们总是支持你?我推荐这个通用解决方案。还有一个非常好的解释和代码示例。我得到了我的答案。谢谢你,蒂拉克。这很有帮助。感谢您的回答。:-)
    private void ShowForm<T>(T frm) where T : Form
    {
        if (frm == null || frm.IsDisposed)
        {
            frm = new T { MdiParent = this };
            frm.Show();
            frm.WindowState = FormWindowState.Maximized;
        }
        else
        {
            frm.Activate();
        }
    }