• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Form1で宣言したインスタンスをForm2で使う)

Form1でインスタンスを宣言してForm2で使用する方法

このQ&Aのポイント
  • 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を使用することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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;       }     }   }

lain_003
質問者

お礼

ほんとだ!できました! これができなくて本当に困っていたんです><。 親切でわかりやすい回答をありがうございました。

関連するQ&A