Winforms,通过表单名称获取表单实例

我需要一个方法,通过表单的名称返回一个新的表单实例。 这是我到目前为止:

public Form GetFormByName(string frmname) { return Assembly.GetExecutingAssembly().GetTypes().Where(a => a.BaseType == typeof(Form) && a.Name == frmname).Cast
().FirstOrDefault(); }

但是,当我尝试执行此代码时,我收到以下错误:

无法将类型为“System.RuntimeType”的对象强制转换为“System.Windows.Forms.Form”。

这个错误是什么意思?

您需要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); } 
 Assembly asm = typeof(EnterHereTypeInTheSameAssembly).Assembly; Type type = asm.GetType(name); Form form = (Form)Activator.CreateInstance(type);