プロが教えるわが家の防犯対策術!

VS2005を使用しているものです。

form1にある文字列の配列と数値データを
form2に持っていきたいのですが、どのように扱えばよいか
分からず困っています。

書物等などもいろいろ見てはいるのですが、クラス間のデータの
移動などがそれに近いのでしょうか?

フォーム間の移動自体はボタンクリックで次のような感じに行っています

Form form2 = new form2();
form.ShowDialog();

初心者ですが、何かご教授願えれば幸いです。

A 回答 (2件)

フォーム間のデータ受け渡しは、開かれる側(下記ではform2だね)にパブリックプロパティを作るのが楽で得だ。



・form2.cs
private string[] _hoge;
public string[] Hoge {
get { return this._hoge; }
set { this._hoge = value; }
}

・form1.cs
private string[] _fuga;
form2 form2 = new form2();
form2.Hoge = this._fuga; // セット
form2.ShowDialog();
this._fuga = form2.Hoge; // 戻し

ANo.1の方のあいでいあを借りるのであれば、コンストラクタの引数はform1自身にしてしまうと双方向のやり取りができるぞ。以下、ぱくり。

// form2のコードの一部
private form1 _f = null;
public form2(form1 f)
{
  InitializeComponent();
  this._f = f;
}
---------------------------------------
// form1のコードの一部
private void button1_Click(object sender, EventArgs e)
{
  form2 f = new form2(this);
  f.ShowDialog();
}

もちろん、どちら(コンストラクタ方式とパブリックプロパティ方式)の渡し方でもOKであるがゆえに、あなたが作るソフトにより適した方を選べる設計センスの見せ所であるがゆえに。
    • good
    • 0
この回答へのお礼

使い方次第でいろいろあるのですね~!
コンストラクタとパブリックプロパティどちらも試させて頂きました!

今回はプロパティの方でなんとか丸く収まりました
お二方のアイデアはまた今後の開発に参考にさせていただきます!

ご回答ありがとうございました!

お礼日時:2008/11/18 22:17

Form2のコンストラクタをもう一個作って、Form1で新しく作ったコンストラクタを呼び出すようにすればどうでしょう?


とりあえず瞬間思いつきのコードを書いたけれど、問題は起きなかったです。

// Form2のコードの一部
public Form2(string msg, int n)
{
  InitializeComponent();
  this.label1.Text = msg;
  this.label2.Text = n.ToString();
}
---------------------------------------
// Form1のコードの一部
private void button1_Click(object sender, EventArgs e)
{
  Form2 f = new Form2("abcdefg", 354);
  f.ShowDialog();
}
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます!
コンストラクタを使ったことがなかったので、大変参考になりました!

今後の研究にも参考にさせていただきます!

お礼日時:2008/11/18 22:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!