簡體   English   中英

Activator.CreateInstance將變量傳遞給窗體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM