1

我有一个我想通用的功能来显示表单。我希望该函数检查表单是否已经打开,如果没有创建表单的新实例并显示它,则将其带到顶部。

检查表单是否打开的第一部分一切都很好,但我正在从 T 进行强制转换并创建一个类型为 T 的新表单对象。我已经使用这行代码来创建表单的一个实例,obj = Activator.CreateInstance<T>();但它没有显示所有智能感知中的方法和属性。代码Form x = new Form1. x将显示所有方法和属性。

我确定我在这里做错了什么,请为我发光。

     private static void ShowForm<T>(  )
    {
        T obj = default( T );

        List<T> opened = FormManager.GetListOfOpenForms<T>();
        if ( opened.Count == 0 )
        {
            // not opened

            // obj does not show all properties and methods
            obj = Activator.CreateInstance<T>();


            // x shows all properties and methods
            frmLogin x = new frmLogin();

        }
        else
        {
            // opened

        }

    }
4

1 回答 1

5

您需要约束 T 继承Form

private static void ShowForm<T>() where T : Form, new()

一旦编译器知道T可以保证继承Form,您就可以使用在Form或其基类中定义的所有成员。

对您的问题更一般的答案是转换objForm.

于 2012-11-04T02:02:59.140 回答