3

フォームの名前でフォームの新しいインスタンスを返すメソッドが必要です。これが私がこれまでに持っているものです:

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

ただし、このコードを実行しようとすると、次のエラーが発生します。

タイプ「System.RuntimeType」のオブジェクトをタイプ「System.Windows.Forms.Form」にキャストできません。

このエラーはどういう意味ですか?

4

2 に答える 2

11

:を指定したタイプのインスタンスを作成する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);
}
于 2012-08-23T12:42:05.613 に答える
0
Assembly asm = typeof(EnterHereTypeInTheSameAssembly).Assembly;
Type type = asm.GetType(name);
Form form = (Form)Activator.CreateInstance(type);
于 2012-08-23T12:43:02.837 に答える