(provisional)

データサイエンティストになるためのあれこれ

【C#】別のクラスに値を渡す

Visual C# 2017で別のクラスに値を渡すことができたので簡単にまとめたいと思います。

こちらの記事を参考にしました!)

やりたいこととしては、

  • 1. Form1にテキストボックス(T1)とボタン(B1)がある。
  • 2. Form2にテキストボックス(T2)とボタン(B2)がある。
  • 3. B1を開くとForm2が開く。
  • 4. B2を押すとT2のテキストがT1に反映される。

こんな感じです!

そのコードは以下の通り。

まずはForm1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            string recieveText = f.ShowMiniForm();
            textBox1.Text = recieveText;
        }
    }
}


次にForm2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        public string returnText;

        public Form2()
        {
            InitializeComponent();
        }

        public string ShowMiniForm()
        {
            Form2 frm2 = new Form2();
            frm2.ShowDialog();
            string receiveText = frm2.returnText;
            frm2.Dispose();
            return receiveText;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.returnText = textBox1.Text;
            this.Close();
        }
    }
}


ざっくり説明します。

Form2 f = new Form2();

Form1でボタンをクリックすると、Form2のインスタンスを生成します。

string recieveText = f.ShowMiniForm();

Form2のShowMiniFormメソッドへ。
その戻り値がrecieveTextへ格納されます。

textBox1.Text = recieveText;

格納されたrecieveTextの値をテキストボックスに表示します。

ここまでがForm1です。


Form2の

public partial class Form2 : Form

のすぐ下にある

public string returnText;

は、ShowMiniFormメソッドとボタンをクリックしたときのイベントとの間で、
returnTextという変数をやり取りしたいのでここに記入してます。


ではShowMiniFormメソッドでは何をしてるかというと

Form2 frm2 = new Form2();

Form2のインスタンスを生成します。

frm2.ShowDialog();

ダイアログを表示します。

string receiveText = frm2.returnText;

returnTextをreceiveTextへ格納します。
returnTextはあとで出てきますので少々お待ちを。

frm2.Dispose();

リソースを解放します。
「今まで使用中だったけど、もう使っていいよー」
ってことかな?
ちょっと理解があいまいです。

return receiveText;

このメソッドの戻り値としてreceiveTextを返します。

ここまでがShowMiniFormメソッドです。


で、Form2のボタンをクリックするとこんな感じ。

this.returnText = textBox1.Text;

テキストボックスの値をreturnTextへ代入。

this.Close();

このクラス(表示されているダイアログのこと)を閉じる。


ということで、

  • Form1でボタンをクリックするとShowMiniFormメソッドによってダイアログが開かれる。
  • ダイアログの(Form2の)テキストボックスに入ってる値を、receiveTextっていう変数に代入する。
  • Form2のボタンを押すと、そのreceiveTextがForm1にいってテキストボックスに反映される。

となります。


これで別のクラスに値を渡すことができました!
「もっとこうした方がいいで!」
というのがあればぜひ教えてくださいー!