在C#Windows应用程序中,我有一个登录表单,MdiParent表单和几个Mdichild表单。当用户成功登录时,启动Mdi Parent表单,然后用户可以通过单击MDI Parent上的按钮启动子表单。在MDI Parent表单中,我有一个方法:
public void ShoworActivate<T>(string loggedUser)where T: Form
{
var k = MdiChildren.Where(c==>c.GetType() == typeof(T)).FirstorDefault();
if(k= null)
{
k = (Form)Activator.CreateInstance(typeof(T));
......More code
}
}
我需要将参数字符串loggedUser传递给子表单但是当我将参数放在子表单的构造函数中时,我收到一个错误: {&#34;没有为此对象定义无参数构造函数。&#34;}
我该如何解决这个问题? 我不想使用Child Form = new ChildForm(string loggedUser)。这样可行。
答案 0 :(得分:0)
您正在使用反射创建表单实例来完成工程设计。您可以使用工厂来创建表单。
无论如何,对于当前的问题,您需要使用另一个版本的CreateInstance
方法,该方法还需要在目标类型的构造函数中传递参数。
k = (Form)Activator.CreateInstance(typeof(T), System.Reflection.BindingFlags.CreateInstance, null, loggedUser);
您可以在https://msdn.microsoft.com/en-us/library/system.activator.createinstance(v=vs.110).aspx
中引用CreateInstance
方法的各种覆盖
答案 1 :(得分:0)
的CreateInstance(typeof运算(T),loggedUser);