【问题标题】:Winforms, create form instance by form nameWinforms,按表单名称创建表单实例
【发布时间】:2019-08-06 14:12:22
【问题描述】:

我需要一个通过表单名称返回表单新实例的方法。这是我目前所拥有的:

    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”类型。

这个错误是什么意思?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您需要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);
    }
    

    【讨论】:

    • IMO,您应该将其命名为 TryGetFormByName,或者如果找不到类型则抛出异常。 (无论如何+1)
    【解决方案2】:
    Assembly asm = typeof(EnterHereTypeInTheSameAssembly).Assembly;
    Type type = asm.GetType(name);
    Form form = (Form)Activator.CreateInstance(type);
    

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      相关资源
      最近更新 更多