본문 바로가기
개발 이야기/C# 이야기

C# 부모폼과 자식폼 데이터 전달

by 런던살자 2019. 6. 20.

안녕하세요 마블랑입니다. 

 

C#을 통해 프로세스를 구현했을때 단순히 부모폼과 자식폼 사이의 데이터를 주고 받아야 할때 사용할 수 있는 간단한 코드를 알려드립니다.

 

 

 

1. 부모폼 (Form_p)

using System;
using System.Windows.Forms;

namespace WindowsForms_Test_001
{
    public partial class Form4_p : Form
    {
       public String SendData = "부모 원본 데이터";  //public 으로 선언

        public Form4_p()
        {
            InitializeComponent();
        }

        private void Bt_child_Click(object sender, EventArgs e)
        {
            Form4_c form_child = new Form4_c(tb_send.Text);

            form_child.Owner = this;        //자식폼 Owner를 자신으로 설정

            if (form_child.ShowDialog() == DialogResult.Cancel) {
                tb_Data.Text = SendData;
            }
        }
    }
}

 

버튼 클릭시 자식폼이 생성이 됩니다. 이때 Owner를 자신으로 설정합니다.

 

자식폼 생성시 생성자에 문자열을 전달합니다. 다른 방법도 있지만 이 포스팅에서는 생성자를 통해 부모에서 자식으로 데이터를 전달합니다.

 

자식폼에게 데이터를 받을 문자열 변수를 전역변수로 public으로 선언을 해줍니다.

 

 

2. 자식폼 (Form_c)

using System;
using System.Windows.Forms;

namespace WindowsForms_Test_001
{
    public partial class Form4_c : Form
    {
        string SendData="자식 원본 데이터";
        public Form4_c(string SendData)  
        {
            InitializeComponent();
            this.SendData = SendData; // 부모 -> 자식 데이터 전달
        }

        private void Form4_c_Load(object sender, EventArgs e)
        {
            tb_Data.Text = SendData;  // 부모에게 받은 데이터 표시
        }

        private void Bt_close_Click(object sender, EventArgs e)
        {
            Form4_p form_parent = (Form4_p)Owner;  //자식폼 생성시 정의한 Owner를 부모폼 객체로 생성

            form_parent.SendData = tb_send.Text;  //자식 -> 부모 데이터 전달

            this.Close();
        }
    }
}

 

자식폼은 생성자로 받은 데이터를 전역 변수에 저장합니다.

 

그리고 Form4_c_Load 이 호출될때 화면에 표시가 됩니다.

 

Close 버튼을 클릭하면 미리 Owner로 설정한 부모를 새로 객체로 생성하고 미리 선언한 public 문자열에 데이터를 넣어주고 자식폼을 닫아줍니다.

 

 

 

자식폼이 닫히면 부모폼에서는 자식폼이 닫힌것을 확인하고 자신의 전역변수를 통해 받은 데이터를 표시하여 줍니다.

 

 

전체적인 코드를 봤을때 그렇게 어려운 내용이 아니고 내부 동작도 어렵지 않으므로 쉽게 이해하실수 있을거라 봅니다.

 

 

이상 마블랑이었습니다.

 

읽어주셔서 고맙습니다!

댓글