- ベストアンサー
C# 配列などの受け渡し
VS2005を使用しているものです。 form1にある文字列の配列と数値データを form2に持っていきたいのですが、どのように扱えばよいか 分からず困っています。 書物等などもいろいろ見てはいるのですが、クラス間のデータの 移動などがそれに近いのでしょうか? フォーム間の移動自体はボタンクリックで次のような感じに行っています Form form2 = new form2(); form.ShowDialog(); 初心者ですが、何かご教授願えれば幸いです。
- みんなの回答 (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であるがゆえに、あなたが作るソフトにより適した方を選べる設計センスの見せ所であるがゆえに。
その他の回答 (1)
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(); }
お礼
ご返答ありがとうございます! コンストラクタを使ったことがなかったので、大変参考になりました! 今後の研究にも参考にさせていただきます!
お礼
使い方次第でいろいろあるのですね~! コンストラクタとパブリックプロパティどちらも試させて頂きました! 今回はプロパティの方でなんとか丸く収まりました お二方のアイデアはまた今後の開発に参考にさせていただきます! ご回答ありがとうございました!