2013-05-29 31 views
1

我想要一个方法,只能发送窗体的类型打开,然后打开该窗体。打开一个通用表格

这是我到目前为止有:

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

我知道我可以做这样的方法:

private void OpenForm(Form frm) 
{ 
    if (OpenedForm != null) 
    { 
     OpenedForm.Close(); 
    } 
    OpenedForm = frm; 
    OpenedForm.MdiParent = this; 
    OpenedForm.Show(); 
    OpenedForm.WindowState = FormWindowState.Maximized; 
} 

,然后简单地调用它像这样:

Form newform = new TestForm(); 
OpenForm(newform); 

但我会有兴趣知道是否有可能做到这一点,就像我在第一个代码片段中试过的一样,并且需要对ac做些什么完成这一点。

回答

2
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; 
} 

现在你可以只通过元数据类的FormType或它的派生之一。所以,如果你这样做:

OpenForm(typeof(Form)); 

一个新的空表格将被创建并打开

+0

非常有趣!谢谢!奇迹般有效。 – Corne