2017-02-12 1 views
0

あるフォームから別のフォームに変数を渡したいと思います。Activator.CreateInstanceはフォームに変数を渡します

これはForm2の中コンストラクタです:

をForm1に
public Form2 (int getId,string getText) 

私はこの

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

ような変数を渡すためにしようとしている私はエラーを取得しています:

どう

Additional information: Constructor on type 'myproject.Form2' not found.

変数を渡すことはできますか?

+3

[理由:http://meta.stackexchange。com/q/66377/147640)あなたは最初に 'Activator.CreateInstance'を使用していますか? – GSerg

+0

アクティベータは、コンパイル時にあなたが作成するオブジェクトが何であるかわからない動的なタイプのコンテキストでのみ意味があります。 – Hristo

+0

2つのパラメータを取るForm2のコンストラクタを呼び出そうとしています。 1つはint型のパラメータで、2つ目は文字列型のパラメータです。あなたが言及したエラーによると、Form2クラスにそのようなコンストラクタはありません。 – Jacob

答えて

0

(正しい型にキャストすると)どこに問題があるのか​​わかりませんが、対応するコンストラクタがあれば、コードは正常に動作します。

あなたは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"}); 

また、あなたがTypeインスタンスを取得するためにtypeofを使用することができます。

var obj = (Form2)Activator.CreateInstance(typeof(Form2), new object[] {1, "test"}); 

しかし、あなたはどれを知っていればコンパイル時に作成するインスタンスのタイプは、012を使用してオブジェクトを作成するだけです:

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

@ LuisVito、それは本当に問題を解決しましたか?あなたのコードが私のために働いているからです。 –

2

私の理解が届く限り、Activatorクラスを誤って使用しています。あなたが本当に使っているはずのものは、作成するタイプをよく知っているので、オブジェクトを作成するための 'new'キーワードです。ここで

は、それがどのように見えるべきかです:アクティベータークラスを使用

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

あなたが本当に作成するタイプが何であるかを認識していない場合にのみ意味があります。

2

リフレクションを使用せずにフォームのインスタンスを作成してみませんか?

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

あなたはあなたのコードがForm2クラスが同じアセンブリに「myprojectに」名前空間内で定義されていれば、作業すべきいくつかの理由でリフレクションを使用したい場合。それは別のアセンブリで定義されている場合

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

あなたはこれを読んでください。あなたがいないFormに、Form2にキャストする必要があり

Resolve Type from Class Name in a Different Assembly

関連する問題