-
[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); } } }
'프로그래밍 > C#' 카테고리의 다른 글
[C#] ContextMenuStrip Size 조절 (3) 2020.11.06 [C#] virtual, abstract, interface (2) 2020.11.05 [C#] TextBox 에 찾기바꾸기 기능 활용 (0) 2020.09.29 [C#] Column editing function in TextBox (0) 2020.09.29 [C#] Scintillanet 이란 ? (0) 2020.09.25