[英]Activator.CreateInstance pass variable to form
我想將變量從一種形式傳遞到另一種形式。
這是form2中的構造函數:
public Form2 (int getId,string getText)
在form1中,我試圖傳遞這樣的變量
var obj = (Form)Activator.CreateInstance(Type.GetType("myproject.Form2"),1,"test");
obj.ShowDialog();
我收到錯誤消息:
附加信息:找不到類型為“ myproject.Form2”的構造方法。
如何傳遞變量?
據我了解,您正在濫用Activator類。 您真正應該使用的是'new'關鍵字來創建對象,因為您很清楚將要創建的類型。
它的外觀如下:
var obj = new Form2(1,"test");
僅當您不知道要創建的類型是什么時,才使用Activator類。
為什么不使用反射就不創建Form的實例呢?
Form2 frm2 = new Form2(1, "test");
frm2.ShowDialog();
如果出於某種原因要使用反射,則只要Form2
類在同一程序集中的“ myproject”命名空間中定義,代碼就可以工作。
namespace myproject
{
public class Form2 : Form
{
public Form2 (int getId, string getText)
{
InitializeComponent();
}
}
}
如果是在另一個程序集中定義的,則應閱讀以下內容:
您應該轉換為Form2
而不是Form
。
我不知道問題出在哪里(如果將類型強制轉換為正確的類型),但是如果您具有相應的構造函數,那么您的代碼對我來說就可以正常工作。
您可以嘗試將參數作為object[]
( object
數組) -CreateInstance(Type type,object [] args)傳遞,但是您也可以通過傳遞參數的方式傳遞參數(因為方法接受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
創建對象:
var obj = new Form2(1, "test");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.