朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら 
.Net フォーム間でのデータの受け渡し





フォーム間でのデータの受け渡しについてどのようにするのかという質問が多いように思われる。タイプとしては、あるフォームで入力したデータを、そのフォームが閉じた時に取得するというものと、 あるフォームを開いたままで、別のフォームが任意のタイミングで取得するというものがある。順番にサンプルコードを提示したいと思う。

1.フォームを閉じたタイミングで更新

C#

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        public string TestText
        {
            set 
            { 
                //テキストボックスに書き込む
                this.textBox1.Text = value; 
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form3 frm = new Form3();
            //Form2をオーナーフォームに指定しておく
            frm.ShowDialog(this);
        }
    }
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //渡したいフォームを取得
            Form2 frm = this.Owner as Form2;
            //渡したいデータを書き込む
            frm.TestText = this.textBox1.Text;
            this.Close();
        }
    }

VB.NET

Public Class Form2
    Public WriteOnly Property TestText() As String
        Set(ByVal value As String)
            'テキストボックスに書き込む
            Me.TextBox1.Text = value
        End Set
    End Property
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim frm As Form3 = New Form3()
        'Form2をオーナーフォームに指定して開く
        frm.ShowDialog(Me)
    End Sub
End Class
Public Class Form3
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '渡したいフォームを取得
        Dim frm As Form2 = CType(Me.Owner, Form2)
        '渡したいデータを書き込む
        frm.TestText = Me.TextBox1.Text
        Me.Close()
    End Sub
End Class

2.任意のタイミングで別フォームのデータを取得

C#

    public partial class Form4 : Form
    {
        //入力するフォームの変数を用意しておく
        Form5 _frm;
        public Form4()
        {
            InitializeComponent();
            _frm = new Form5();
            //フォームを表示するが、モーダル表示にしてはいけない。
            _frm.Show();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //データをコピーする
            this.textBox1.Text = _frm.TestText;
        }
    }
    public partial class Form5 : Form
    {
        public Form5()
        {
            InitializeComponent();
        }
        public string TestText
        {
            get { return this.textBox1.Text; }
        }
    }

VB.NET

Public Class Form4
    '入力するフォームの変数を用意しておく
    Private _frm As Form5
    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        _frm = New Form5()
        'フォームを表示するが、モーダル表示にしてはいけない。
        _frm.Show()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'データをコピーする
        Me.TextBox1.Text = _frm.TestText
    End Sub
End Class
Public Class Form5
    Public ReadOnly Property TestText() As String
        Get
            Return Me.TextBox1.Text
        End Get
    End Property
End Class








良いやや良い普通やや悪い悪い
2 0 11 1 4

投稿日時評価コメント
1/18/2017 8:15:45 AM 普通 開発環境と言語はなんでしたでしょうか?
1/17/2017 11:29:34 PM 悪い 書いたとおりにしてもできませんでした.