すぐ忘れるので、よく使う小技を集めました。
Form関連 (親子孫Formで親の変数を共有)
1.親子関係で、子が親の変数を利用したい場合 【子がf.ShowDialog(this);で表示された場合に限る。緊急時のみ?】
子をモーダル表示して、親を隠す
this.Hide(); //自分を隠す-----------------
//【モードレス表示】
//Form子 f = new Form子();
//f.Show();
//【モーダル表示】
Form子 f = new Form子(); //Form子クラスのインスタンスを作成する
f.ShowDialog(this); //モーダルダイアログボックスとして表示する。オーナーウィンドウにthisを指定する。
f.Dispose(); //フォームが必要なくなったところで、Disposeを呼び出す
this.Show(); //自分を現す------------------
子から、親の変数を呼び出す
子の変数 = ((Form親)this.Owner).親の変数; //他のフォームからPublic変数を呼び出す。
2. 親子孫関係で、子孫が親の変数を利用したい場合 【この方法が一番しっくりくるかも】
親のコード
public partial class Form親 : Form
{
//【参考HP】http://dobon.net/vb/dotnet/form/accessanotherformdata.html
//---Publicオブジェクト宣言部----------------------------------------------
//Form親オブジェクトを保持し、親のイスタンスを公開する
private static Form親 _form親Instance;
//Form親オブジェクトを取得、設定するためのプロパティ
public static Form親 Form親Instance
{
get
{
return _form親Instance;
}
set
{
_form親Instance = value;
}
}
private string targetStr;
public string TargetStr
{
get
{
return targetStr;
}
set
{
//空白 ←子から書き換えられないようにする場合。
}
}
//-----------------------------------------------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
//---他のフォームへの変数照会用
Form親.Form親Instance = this; //Form親Instanceに代入
targetStr = "あいうえお"; //値を設定
}
private void buttonFromを表示_Click(object sender, EventArgs e)
{
//子をモーダル表示
Form子 f = new Form子();
f.ShowDialog(this); //親はthis、つまり「form親」だよの設定。
f.Dispose();
}
}
子のコード
private void button親の変数表示_Click(object sender, EventArgs e)
{
//Form親の変数を取得
label1.Text = Form親.Form親Instance.TargetStr;
}
private void button親の変数書き換えちゃう_Click(object sender, EventArgs e)
{
//Form親の変数を書き換えちゃう
Form親.Form親Instance.TargetStr = "ABCDE";
}
private void button孫の表示_Click(object sender, EventArgs e)
{
Form孫 f = new Form孫();
f.ShowDialog(this);
f.Dispose();
}
孫のコード
private void button親の変数表示_Click(object sender, EventArgs e)
{
//Form親の変数を取得
label1.Text = Form親.Form親Instance.TargetStr;
}
参考にさせて頂いたページ⇒ http://dobon.net/vb/dotnet/form/accessanotherformdata.html