電子書籍の厳選無料作品が豊富!

c#で次の次のフォームへのデータの渡し方

お世話になります。
c#初心者です。

フォーム1にはbuttonが2つあり、どちらを押したかで
次(フォーム2)の次のフォーム(フォーム3)を開く時に
そのフォームにあるボタンを表示させるか・非表示にさせるか
したいと思っております。

中途半端ですが下記の様なコードを書いておりましてその先
フォーム3での記述をどの様に書いたら良いのか行き詰って
しまいました。
どなたかご親切な方、ご教示頂きたく宜しくお願い申し上げます。


          記
クラス

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
public class Keikaku
{

public enum Mode
{
Syuuse,
Syoukai
}
}
}

----------------------------------

フォーム1

namespace WindowsFormsApplication1
{
public partial class MainMenu : Form
{


private void button1_Click(object sender, EventArgs e)
{

Form2 cForm2 = new Form2();
cForm2.Syuusei = Keikaku.Mode.Syuusei;
cForm2.ShowDialog();
}

private void button2_Click(object sender, EventArgs e)
{

Form2 cForm2 = new Form2();
cForm2.Syuusei = Keikaku.Mode.Syoukai;
cForm2.ShowDialog();
}
}
}

----------------------------------

フォーム2

namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private Keikaku.Mode _kakunin;
public Keikaku.Mode Syuusei
{
set
{
_kakunin = value;

}
}

private void button1_Click_1(object sender, EventArgs e)
{
Form3 cForm3 = new Form3();

cForm3.ShowDialog();

}
}
}
----------------------------------

フォーム3

namespace WindowsFormsApplication1
{
public partial class Form3 : Form
{
}
}

A 回答 (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型の整数で扱う形にする必要があります。
    • good
    • 0
この回答へのお礼

おかげさまで出来ました。
ありがとうございました。

今後とも宜しくお願い致します。

お礼日時:2010/08/08 20:57

(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; // 例
}
    • good
    • 0
この回答へのお礼

早々にご回答頂きありがとうございます。

しかし、フォーム1から直でフォーム3を開くのではなくて、フォーム2を経由
してから開きたいのです。ですので、フォーム1のtrueかfalseの情報をフォーム2
でも保持して置き、フォーム2からフォーム3を開いた時にその保持していた
trueかfalseの情報を活用したいのです。

分かりにくい説明で申し訳ございませんが、この場合のやり方はいかがでしょうか。
何卒、宜しくお願い申し上げます。

お礼日時:2010/08/08 10:58

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