본문 바로가기

.NET/Winforms

[WINFORMS] form 데이터 전송

화면 예시

  • Form1 은 부모, Form2 는 자식 폼 이다.
  • Form1 에서 open 버튼 을 클릭하여 Form2 를 호출한다.
  • Form2 에서 이름과 나이를 입력한 후 submit 버튼 클릭시 데이터를 Form1 으로 전달한다.

# 1 delegate 와 event 를 이용한 데이터 전달 

  • 자식 폼 에서 delegate 와 event 를 생성 
  • 부모 폼 에서 메소드를 생성하고 해당 메소드를 자식 폼 이벤트에 바인딩 한다.
  • 자식 - 부모, 부모 - 자식 양방향 데이터 전달 가능, 양방향 통신을 원한다면 역으로 구현 하면 된다.
  • 상호 데이터 교환이 활발한 경우 추천되는 방식
    public partial class Form1 : Form
    {
        private Form2 form2;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            form2 = new Form2();

            form2.DataEvent += new Form2.DataEventHandler(DataEvent);
            form2.Show();
        }

        private void DataEvent(string name, string age)
        {
            richTextBox1.Text = string.Format("이름: {0}, 나이: {1}", name, age);
        }
    }
    public partial class Form2 : Form
    {
        public delegate void DataEventHandler(string name, string age);
        public event DataEventHandler DataEvent;

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            DataEvent(textBox1.Text, textBox2.Text);
            this.Close();
        }
    }

# 2 delegate 와 event 를 이용한 데이터 전달 

  • 람다식과 Action 을 이용하여 코드를 더욱 간결하게 줄인다.
    public partial class Form1 : Form
    {
        private Form2 form2;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            form2 = new Form2();

            form2.DataEvent += (name, age) =>
            {
                richTextBox1.Text = string.Format("이름: {0}, 나이: {1}", name, age);
            };

            form2.Show();
        }

    }
    public partial class Form2 : Form
    {
        public Action<string, string> DataEvent;

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataEvent?.Invoke(textBox1.Text, textBox2.Text);
            this.Close();
        }
    }

Dialog 와 변수를 이용한 방법

  • DialogResult 값에 따라 여러 조건을 부여할 수 있다.
  • 자식 폼 생성자를 이용하여 더욱 풍부하게 구현가능하다.
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (var form = new Form2())
            {
                var result = form.ShowDialog(); // 생성자 값 삽입 가능
                if (result == DialogResult.OK)
                {
                    var data = form.DictData;
                    richTextBox1.Text = string.Format("이름: {0}, 나이: {1}", data["Name"], data["Age"]);
                }
            }
        }

    }
    public partial class Form2 : Form
    {
        public Dictionary<string, string> DictData = new Dictionary<string, string>();

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DictData.Add("Name", textBox1.Text);
            DictData.Add("Age", textBox2.Text);
            DialogResult = DialogResult.OK;
        }
    }
Show : 부모 폼과 자식 폼을 동시에 제어 가능
ShowDialog : 자식폼이 활성화 된 상황에서 부모 폼을 제어 할 수 없음

There might be incorrect information or outdated content.