Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
770 views
Welcome To Ask or Share your Answers For Others

1 Answer

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...