- ベストアンサー
c#で次の次のフォームへのデータの渡し方
- c#初心者の方向けに、フォーム間でデータを渡す方法について解説します。
- フォーム1にあるbuttonを押した際に、フォーム2を表示させる際に、そのフォームにあるボタンを表示させるか非表示にさせるかしたい場合、どのようにコードを書けば良いのか迷っています。
- フォーム1でボタンがクリックされたかを判定し、フォーム2の表示前にフォーム2にデータを渡す処理を追加することで、目的の動作を実現することができます。具体的なコードの書き方も解説していますので、ぜひ参考にしてみてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Form1→Form2→Form3の時 極力データの引き回しを避けるならすでにForm1のボタンによって設定値の違っている_kakuninの値を利用します。(Keikaku.Modeのクラスなり型において「==」演算子が有効な場合ですが) (1)Form3クラスに状態通知用のpublicメソッドと表示状態のプロパティを作ります。 private bool piyo = false; public void hoge(bool btn_sts) { // Form1のボタン状態によってForm3の状態を決定する // (引数は適当) this.piyo = btn_sts; } (2)Form2でのForm3の生成直後に(1)のメソッドを呼びます。 private void button1_Click_1(object sender, EventArgs e) { Form3 cForm3 = new Form3(); cForm3.hoge(this._kakunin == Keikaku.Mode.Syoukai); // 例 cForm3.ShowDialog(); } (3)Form3のロード時にコントロールの表示非表示を行ないます。 private void Form3_Load(...) { // (1)で取得した状態にしたがってボタンの表示/非表示の処理 this.buttonA.visible = this.piyo; // 例 } 何らかの理由で_kakuninの値が使えないときはForm1→Form2において、Form2→Form3と同様なメソッドの呼出でボタンの状態を渡すようにします。 また、上記ではForm1のbutton1ならfalse, button2ならtrueのbool値で状態を判別していますが、Form1のボタンの数が3個以上とかならint型の整数で扱う形にする必要があります。
その他の回答 (1)
- magicalpass
- ベストアンサー率58% (378/648)
(1)Form3クラスに状態通知用のpublicメソッドと表示状態のプロパティを作ります。 private bool piyo = false; public void hoge(bool btn1, bool btn2) { // Form1のボタン状態によってForm3の状態を決定する // (引数は適当) if (btn1) piyo = true; // 例 if (btn2) piyo = false; // 例 } (2)Form1でのForm3の生成直後に(1)のメソッドを呼びます。 private void button1_Click_1(object sender, EventArgs e) { Form3 cForm3 = new Form3(); cForm3.hoge(true, false); // ShowDialogより前 cForm3.ShowDialog(); } (3)Form3のロード時にコントロールの表示非表示を行ないます。 private void Form3_Load(...) { // (1)で決定した状態にしたがってボタンの表示/非表示の処理 this.buttonA.visible = piyo; // 例 }
お礼
早々にご回答頂きありがとうございます。 しかし、フォーム1から直でフォーム3を開くのではなくて、フォーム2を経由 してから開きたいのです。ですので、フォーム1のtrueかfalseの情報をフォーム2 でも保持して置き、フォーム2からフォーム3を開いた時にその保持していた trueかfalseの情報を活用したいのです。 分かりにくい説明で申し訳ございませんが、この場合のやり方はいかがでしょうか。 何卒、宜しくお願い申し上げます。
お礼
おかげさまで出来ました。 ありがとうございました。 今後とも宜しくお願い致します。