动态初始化窗体对象

时间:2013-09-24 15:57:44

标签: c# winforms

我如何动态初始化获胜表单。在我的应用程序中,我有多种表单,例如50多个,以下代码重复多次..

所以我想为它创建一些功能并完成这项工作。但是如何创建特定表格的new () instance 任何帮助将不胜感激。

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

4 个答案:

答案 0 :(得分:6)

如果您知道要使用的Type,则可以使用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();
    }
}

答案 1 :(得分:1)

您可以使用反射。

Activator.CreateInstance - MSDN

        frm = (Form)Activator.CreateInstance(t) // t is a type parameter

答案 2 :(得分:0)

使用Activator:

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

答案 3 :(得分:0)

使用泛型的力量:

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