我有一个函数,我想使通用显示表单.我希望函数检查表单是否已经打开,如果是这样,如果没有创建表单的新实例并显示它,请将其置于顶部.
检查表单是否打开的第一部分都很好但是我从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
}
}
Run Code Online (Sandbox Code Playgroud)
你需要约束T继承Form:
private static void ShowForm<T>() where T : Form, new()
Run Code Online (Sandbox Code Playgroud)
一旦编译器知道T保证继承Form,您就可以使用在Form其基类中定义的所有成员.
更普遍的回答你的问题是要投obj给Form.