본문 바로가기
C#/C# Windows Form

C# 폼간 데이터 전송

by TcTT 2017. 6. 5.
반응형

C# 폼간 데이터 전송 방법이다.


부모 -> 자식 데이터전송 / 자식 -> 부모 데이터 전송이 있다.

여기서는 자식 -> 부모 데이터 전송만 다룬다.


폼간 데이터 전송방법에는 여러가지 방법이있다.



1.클래스를통해 객체를만들고 객체를통해 접근해서 데이터전송

2.델리게이트를 사용하여 데이터 전송


지금 포스팅에선 2번 델리게이트를 사용할 것이다.


1번을 통해서 폼간 데이터 전송을 사용하려했다.

왜인지는 정확히 모르겠지만, 자식에서 부모로 데이터를 전송하고, 자식폼을 닫기위해 this.Close() 함수를 콜하면서 부모폼에 전송해둔

메모리가 클리어되는거같다....(아마도) 그래서 내가 원하는 형식으로 출력이 되지않았다.

이것저것 삽질하다보니 델리게이트를 사용하면 쉽게 해결된다고한다.


우선 델리게이트의 사전적 의미는 '대리자'이다.

실생활에서 간단한 예를들면.

1. A가 B에게 전화함.

2. B가 자리에없어 C가 대신 전화를받음

3. A는 B에게 C가 돌아오면 A에게 전화해달라고 부탁

4. B가 자리에 돌아와 C가 A에게 전화 부재중이라고 전달.

5. B가 A에게 전화를 건다.

여기서 A에게 부탁받은 C가 바로 대리자 역활이되고, 

전화가왔음을 알려달라고한내용이 콜백(CallBack)이라고 한다.


프로그램 사용법


1. 프로그램 실행시 처음발생하는 부모창 (Form1)

    폼 2번 열기 버튼을 눌러 자식창(Form2) 생성


2. 자식창(Form2)에서 부모창(Form1)에 전달할 데이터를 입력 후,

     데이터 전송버튼 클릭.


3. 자식창(Form2)이 닫히며, 부모창(Form1) 텍스트박스에

    자식창에서 전송한 데이터 출력된다.




소스코드

Form1

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 FormTest
{
    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //버튼을 클릭하면 폼2를 연다.
            Form2 form2 = new Form2();
            //폼 2에 이벤트를 달아둔다..
            form2.FormSendEvent += new Form2.FormSendDataHandler(DieaseUpdateEventMethod);
            form2.ShowDialog();
        }
 
        private void DieaseUpdateEventMethod(object sender)
        {
            //폼2에서 델리게이트로 이벤트 발생하면 현재 함수 Call
            textBox1.Text = sender.ToString();
        }
 
 
    }
}
 
cs

Form2


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 FormTest
{
    public partial class Form2 : Form
    {
        //델리게이트 선언
        public delegate void FormSendDataHandler(string sendstring);
        //이벤트 생성
        public event FormSendDataHandler FormSendEvent;
 
        public Form2()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //델리게이트 이벤트를통해 폼1(부모폼)으로 데이터 전송
            this.FormSendEvent(textBox1.Text);
            //자식창 닫기
            this.Close();
        }
 
    }
}
 
cs

소스코드 다운로드


반응형

'C# > C# Windows Form' 카테고리의 다른 글

C# 관리자권한 실행  (0) 2017.06.13
C# AutoIt 응용  (0) 2017.06.05
C# 그레이스케일 모노크롬  (0) 2017.06.01
C# 형변환  (0) 2017.05.31
C# 시작 폼 변경하기  (0) 2017.05.15