我想将变量从一种形式传递到另一种形式。
这是form2中的构造函数:
public Form2 (int getId,string getText)
在form1中我试图传递像这样的变量
var obj = (Form)Activator.CreateInstance(Type.GetType("myproject.Form2"),1,"test");
obj.ShowDialog();
我收到错误:
其他信息:找不到类型为“myproject.Form2”的构造函数。
如何传递变量?
答案 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();
}
}
}
如果在另一个程序集中定义,则应阅读:
答案 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