我需要一个方法,通过表单的名称返回一个新的表单实例.这是我到目前为止:
public Form GetFormByName(string frmname)
{
return Assembly.GetExecutingAssembly().GetTypes().Where(a => a.BaseType == typeof(Form) &&
a.Name == frmname).Cast<Form>().FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行此代码时,我收到以下错误:
无法将类型为"System.RuntimeType"的对象强制转换为"System.Windows.Forms.Form".
这个错误是什么意思?
nem*_*esv 10
您需要Activator.CreateInstance方法,该方法创建一个给定的类型的实例Type:
public Form TryGetFormByName(string frmname)
{
var formType = Assembly.GetExecutingAssembly().GetTypes()
.Where(a => a.BaseType == typeof(Form) && a.Name == frmname)
.FirstOrDefault();
if (formType == null) // If there is no form with the given frmname
return null;
return (Form)Activator.CreateInstance(formType);
}
Run Code Online (Sandbox Code Playgroud)