Reputation: 1710
I need a method that returns a new instance of a form by the name of the form. Here is what I have so far:
public Form GetFormByName(string frmname)
{
return Assembly.GetExecutingAssembly().GetTypes().Where(a => a.BaseType == typeof(Form) &&
a.Name == frmname).Cast<Form>().FirstOrDefault();
}
However I get the following error when I attempt to execute this code:
Unable to cast object of type 'System.RuntimeType' to type 'System.Windows.Forms.Form'.
What does this error mean?
Upvotes: 3
Views: 6856
Reputation: 28970
Assembly asm = typeof(EnterHereTypeInTheSameAssembly).Assembly;
Type type = asm.GetType(name);
Form form = (Form)Activator.CreateInstance(type);
Upvotes: 0
Reputation: 139758
You need the Activator.CreateInstance method which creates an instance of a type given a 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);
}
Upvotes: 11