みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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;
}
}
}

こういったやり方は普通やらないのでしょうか?
正しい方法、もしくは何か別のものが原因なのでしょうか?
初歩的な質問で申し訳ないですがよろしくお願いします。

投稿日時 - 2014-03-26 00:06:54

QNo.8528985

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>グローバル変数は初期化時に-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);
ではダメなんでしょうか。

投稿日時 - 2014-03-26 01:14:44

ANo.1

「グローバル変数」? どこが?

投稿日時 - 2014-03-26 01:05:20

あなたにオススメの質問