Winforms, create form instance by form name

c#, winforms

Solution

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);
}

Problem

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?

Original source