Activator.CreateInstance将变量传递给form

时间:2017-02-12 16:45:35

标签: c#

我想将变量从一种形式传递到另一种形式。

这是form2中的构造函数:

public Form2 (int getId,string getText)

在form1中我试图传递像这样的变量

var obj = (Form)Activator.CreateInstance(Type.GetType("myproject.Form2"),1,"test");
obj.ShowDialog();

我收到错误:

  

其他信息:找不到类型为“myproject.Form2”的构造函数。

如何传递变量?

3 个答案:

答案 0 :(得分:2)

就我的理解而言,你滥用Activator类。你真正应该使用的是新的'用于创建对象的关键字,因为您很清楚要创建的类型。

以下是它的外观:

var obj = new Form2(1,"test");

使用Activator类只有在你不知道你将要创建的类型时才有意义。

答案 1 :(得分:2)

为什么不在不使用反射的情况下创建表单实例?

Form2 frm2 = new Form2(1, "test");
frm2.ShowDialog();

如果由于某种原因想要使用反射,只要在" myproject"中定义了Form2类,您的代码就可以工作。同一程序集中的命名空间。

namespace myproject
{
    public class Form2 : Form
    {
        public Form2 (int getId, string getText)
        {
            InitializeComponent();
        }
    }
}

如果在另一个程序集中定义,则应阅读:

Resolve Type from Class Name in a Different Assembly

答案 2 :(得分:1)

您应该转为Form2,而不是Form

我不知道问题在哪里(如果你转换为正确的类型),但是如果你有相应的构造函数,那么你的代码对我来说很合适。

您可以尝试将参数传递为object[]object数组) - CreateInstance(Type type, object[] args),但您也可以通过传递参数的方式传递参数(因为方法接受{{1} })。

尝试替换此行:

params object[] args

由此:

var obj = (Form)Activator.CreateInstance(Type.GetType("myproject.Form2"),1,"test");

此外,您可以使用var obj = (Form2)Activator.CreateInstance(Type.GetType("myproject.Form2"), new object[] {1, "test"}); 获取typeof实例:

Type

但是如果您知道在编译时要创建哪种类型的实例,则只需使用var obj = (Form2)Activator.CreateInstance(typeof(Form2), new object[] {1, "test"}); 创建对象:

new