ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] Delegate 를 이용해 폼 간 데이터 전송하기
    프로그래밍/C# 2020. 10. 8. 15:18

     델리게이트(Delegate)

    해석하면 '대리인' 이라는 뜻으로 메서드를 참조하는 변수입니다. 델리게이트의 매개변수에 특정 메서드를 추가시켜주면 해당 델리게이트는 그 메서드를 실행시킬 수 있게 됩니다. 말로는 복잡하니 예제를 보면서 이해하시기 바랍니다.

     

     

     Delegate 를 이용해 폼 간 데이터 전송하기

     

     

    자식 폼의 TextBox 내용을 부모 폼으로 전달하는 간단한 예제를 구현해볼 겁니다.

     

     

     

    우선이게 두 개의 폼의 소스코드입니다. 여기서 우리는 델리게이트가 어떤 식으로 사용되었는지를 파악해볼 겁니다.

    번호 순서대로 화살표를 따라가면서 설명을 읽어주세요.

     

    1번 : 델리게이트를 원하는 반환형과 참조형을 사용하여 생성해주었습니다. 이거는 우리가 델리게이트 변수를 인스턴스 할 수 있도록 틀을 만든 것과 같습니다. 마치 클래스를 선언하기 전에 클래스를 생성하는 것과 같죠.

     

    2번 : 생성해준 델리게이트를 사용하여 변수를 선언해주었습니다. 이 변수가 바로 대리인 역할을 해줄 겁니다.

     

    3번 : 우리가 선언해준 델리게이트 변수에 부모 폼에 있는 메서드를 할당해주었습니다. 앞에서 델리게이트는 C++의 포인터와 비슷한 역학을 한다고 했습니다. 그래서 이 대리인은 다른 폼에서 사용하여도 부모 폼에 있는 메서드가 호출이 됩니다. 바로 이 부분이 폼간 데이터 전달의 핵심이 되겠습니다. 이때 메서드와 델리게이트의 형식은 같아야 합니다.

     

    4번 : 여기서 DataSendEvent 함수는 DataGet 함수를 매개변수와 함께 호출하게 됩니다. 그러면서 매개변수 Data 에는 자식 폼에 있는 텍스트 정보가 전달하게 되어 폼간 데이터 전달이 가능하게 됩니다.

     

     

     

     소스코드

    namespace WindowsFormsApp3
    {
        public partial class ParentForm : Form
        {
            public ParentForm()
            {
                InitializeComponent();
            }
    
            private void OpenChildButt_Click(object sender, EventArgs e)
            {
    
                ChildForm frm = new ChildForm();
                frm.DataSendEvent += new DataGetEventHandler(this.DataGet);
                frm.Show();
            }
    
            private void DataGet(string data)
            {
                ParentTextBox.Text = data;
            }
        }
    }

     

    namespace WindowsFormsApp3
    {
        public delegate void DataGetEventHandler(string data);
        public partial class ChildForm : Form
        {
            public DataGetEventHandler DataSendEvent;
            public ChildForm()
            {
                InitializeComponent();
            }
    
            private void SendButt_Click(object sender, EventArgs e)
            {
                DataSendEvent(ChildTextBox.Text);
                
            }
        }
    
    
    
    }
    

     

    댓글

Designed by Tistory.