- ベストアンサー
Form1でインスタンスを宣言してForm2で使用する方法
- C#を使用してMicrofoft visual stdio 2005で開発されているWindowsアプリケーションで、Form1で宣言されたインスタンスをForm2で使用する方法をご説明します。
- Form1の中でCarクラスのインスタンスbikeを宣言し、Form2でそのインスタンスを使用したい場合、Form2のコンストラクタにForm1のインスタンスを渡し、Form2内でbikeを使うことができます。
- 具体的には、Form1のForm1_Loadメソッド内でbikeを宣言し、Form2のインスタンスを生成してShowメソッドで表示します。そして、Form2のForm2_Loadメソッド内でbikeを使用することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
bikeのインスタンスが ローカル変数なのでForm_Loadイベントの中でしか生存しません つまり Form_Loadイベントが終了した時点で消滅します 次に Carクラスのアクセス指定子が記述されていないので CarクラスはprivateになりForm1クラスからしかアクセス出来ません やるとすれば Carクラスのアクセス指定子をpublicにします bikeインスタンスを フォームのpublicフィールドとして定義します public partial class Form1 : Form { // publicを追加 public class Car { public int a; } // フォームのフィールドとして宣言 public Car bike = new Car(); public void Form1_Load(object sender, EventArgs e) { // ここで宣言したのでは他からアクセス出来ない // Car bike = new Car();//ここで宣言したインスタンスを bike.a = 10; // Form2の newをオーバーライドしていないと // Form2(this)はコンパイルエラーになる // Form2 fm2 = new Form2(this); // fm2.Show(); Form2 fm2 = New Form2(); fm2.Show( this ); // ShowでOwnerを指定する } } public partial class Form2 : Form { public void Form2_Load(object sender, EventArgs e) { int b; // インスタンスbikeはForm2クラスに存在しないので // 下記のような記述は不可 // b = bike.a;//ここでこのように使いたい // Ownerプロパティをキャストして Form1のインスタンスを取得 Form1 fm1 = (Form1)(this.Owner); if ( fm1 != null ) { // Form1のインスタンス経由でアクセスする b = fm1.bike.a; } } }
お礼
ほんとだ!できました! これができなくて本当に困っていたんです><。 親切でわかりやすい回答をありがうございました。