- 締切済み
C#について
最近C#を勉強しはじめました。 メインのform1からボタンをクリックして別のダイアログを出しています。 そこで質問なのですが、メインのform1(親?)のグローバル変数を、 form2(子?)に渡したいのです。 グローバル変数は初期化時に-1を代入しているのですが、子のダイアログをコール時に親の初期化のところがなぜかコールされてしまい、子に渡すときは-1になってしまいます。 親のソース。グローバル変数はint型のaaaです。 namespace test { public partial class Form1 : Form { int aaa; public Form1() { InitializeComponent(); aaa = -1; } //ボタンクリック時の関数 private void OpenMenuToolStripMenuItem_Click(object sender, EventArgs e) { aaa = 0; Form2 f2 = new Form2(); Form2.ShowDialog(); } } } //子のソース、こっちのダイアログをコールする前にpublic partial class Form1 : Formのところが //コールされてaaaには-1が代入されてしまい、bbbに入れるときには-1になってしまいます。 namespace test { public partial class Form2 : Form { public Form2() { InitializeComponent(); Form1 f1 = new Form1(); int bbb = f1.aaa; } } } こういったやり方は普通やらないのでしょうか? 正しい方法、もしくは何か別のものが原因なのでしょうか? 初歩的な質問で申し訳ないですがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
>グローバル変数は初期化時に-1を代入しているのですが、子のダイアログをコール時に親の初期化のところがなぜかコールされてしまい、子に渡すときは-1になってしまいます。 「なぜか」ではなく、そのようなコードを書かれていますけど。 また Form1::aaa はグローバル変数ではなくForm1クラスのインスタンス変数です。 インスタンス変数はインスタンスが異なれば異なります。 void Form1::OpenMenuToolStripMenuItem_Click(object sender, EventArgs e)内で >Form2 f2 = new Form2(); を行っているForm1のインスタンスと Form2::Form2()の >Form1 f1 = new Form1(); // 新しくForm1クラスのインスタンスを作ってる >int bbb = f1.aaa; f1は別物です。 Form2のコンストラクタに public Form2(int bbb): this() { // Form1 fr = new Form1();なんてしない } を作っておいて Form2 f2 = new Form2(aaa); ではダメなんでしょうか。
- Tacosan
- ベストアンサー率23% (3656/15482)
「グローバル変数」? どこが?