C#でフォーム間の値の受け渡しをする

頻出らしいので簡単にまとめ

 

hogeプロジェクト内のForm1からForm2に値を渡す場合

namespace hoge

{

    public partial class Form1 : Form

    {

        public Form1

        {

                 InitializeComponent();

        }

        public button1_Click(object sender, EventArgs e)

        {

                 Form2 piyo = new Form2();

                 piyo.ShowDialog(this, textBox1, textBox2);

        }

    }

}

 

namespace hoge

{

    public partial class Form2 : Form

    {

        private int title;

        private String name;

        public Form2()

        {

                public void ShowDialog(IWin32Window owner, int title, String name)
                {

                    title=title;

                    name=name;

                    base.ShowDialog();

                }

        }

    }

}

 

いわゆるbuttonを押したらform2が出てくるあれです。

 

ただし、Form2のShowDialog()メソッドは違うみたいですね。

 

 

実は、Form2のShowDialog()メソッドは、もともと用意されているShowDialog()メソッドのオーバーライドをやってます。

つまり、オーバーライド元がメソッドであれば、だいたいのオーバーライドは可能だったりします。

 

ちなみにオーバーライドは簡単に言い表すと下克上のようなもので、偉いのがデフォルトのクラス、下っ端は各form内のクラスと考えると分かりやすい。

デフォルトのクラスをform内のクラスで処理を上書きしてしまおう、そんな感じ。

 

今回のsampleではForm2のShowDialog()メソッドが実質的なセッターとなって値をセット、その後は各々でgetしてくださいなという内容でした。

 

他にもインスタンスなどでごちゃごちゃとやっているところは多いのですが、私としてはこの方法が簡単でベストじゃないかなーと思ってます。