【问题标题】:Open a generic form打开通用表单
【发布时间】:2013-05-29 06:23:48
【问题描述】:

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

这是我目前所拥有的:

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

但我很想知道是否可以像我在第一个代码 sn-p 中尝试的那样执行此操作,以及需要做什么来完成此操作。

【问题讨论】:

    标签: c# generics typeof


    【解决方案1】:
    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));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多