LoginSignup
4
8

More than 1 year has passed since last update.

C#のメモ帳 小技集(親子孫Formで親の変数を共有)

Last updated at Posted at 2017-03-28

すぐ忘れるので、よく使う小技を集めました。

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 _formInstance;

        //Form親オブジェクトを取得、設定するためのプロパティ
        public static Form FormInstance
        {
            get
            {
                return _formInstance;
            }
            set
            {
                _formInstance = value;
            }
        }

        private string targetStr;  
        public string TargetStr
        {
       get
            {
               return targetStr;
            }
          set
            {
                //空白 ←子から書き換えられないようにする場合。
            }

        }
        //-----------------------------------------------------------------------------

        private void Form1_Load(object sender, EventArgs e)
        {
            //---他のフォームへの変数照会用
            Form.FormInstance = 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.FormInstance.TargetStr;
        }

        private void button親の変数書き換えちゃう_Click(object sender, EventArgs e)
        {
            //Form親の変数を書き換えちゃう
            Form.FormInstance.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.FormInstance.TargetStr;
        }

参考にさせて頂いたページ⇒ http://dobon.net/vb/dotnet/form/accessanotherformdata.html

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8