본문 바로가기
프로그래밍 언어/WPF

[C#] Form에서 다른 Form으로 데이터 전송하는 방법

by Jinwood 2022. 10. 25.
반응형

에러 메시지를 표시하거나, Yes/No와 같은 간단한 결과를 얻으려는 경우 MessageBox에서 해결할 수 있다.

하지만 특정 데이터를 하나의 Form에서 받은 후 다른 Form에 전달해야 하는 경우, MessageBox로는 불가능하다.

검색을 통해 여러가지 방법을 찾았지만, DataPassEventHandler를 사용하는 방법이 가장 직관적이고

명확한 방식이라 생각해 DataPassEventHandler를 사용하는 방법을 소개한다.

 

DataPassEventHandler를 사용하는 방식은 아래와 같다.

데이터를 받을 Form(또는 xaml)을 부모, 데이터를 전송할 Form(또는 xaml)을 자식이라 하면

1. 부모 Form에서 자식 Form에 대한 DataPassEventHandler를 정의한다.

2. 자식 Form에서 특정 작업을 수행한 뒤, 부모 Form으로 데이터를 전송한다.

3. 부모 Form에서 해당 데이터를 받고, 수행할 작업을 진행한다.

 

1. 부모 Form에서 자식 Form에 대한 DataPassEventHandler 정의

  - 부모 Form에서는 자식 Form에 대한 DataPassEventHandler를 추가해야 한다.

  - 또한 자식 Form에서 데이터를 전달했을 때 받아서 처리하는 메서드를 추가해야 한다.(3, DataReceiveEvent)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void button_Click(object sender, RoutedEventArgs e)
{
    // 자식 Form 선언 및 DataPassEventHandler 설정
    var ChildrenForm = new Children();
    ChildrenForm.DataPassEvent += new Children.DataPassEventHandler(DataReceiveEvent);
    ChildrenForm.Show();
}
 
private void DataReceiveEvent(List<string> data)
{
    // 자식 Form에서 전달하는 데이터 받는 메서드 
    if (data == null || data.Count <= 0) { return; } 
    data.ForEach(p => listBox.Items.Add(p));
}
cs

 

2. 자식 Form에서 특정 동작을 수행한 뒤 부모 Form으로 데이터를 전송하는 메서드 정의

  - DataPassEventHandler를 정의하고, 전달할 파라메터를 설정한다.

  - 특정 이벤트 내부에서 DataPassEvent를 발생시킨다.

1
2
3
4
5
6
7
8
9
10
11
12
// 데이터 전송을 위하여 DataPassEventHandler 생성
// 데이터를 받는 Form에서는 form.DataPassEvent += new form.DataPassEventHandler(DataReceiveEvent); 설정 필요
// 데이터 받아와서 처리하는 부분에 대한 메서드 작성이 필요
public delegate void DataPassEventHandler(List<string> selected_items);
public event DataPassEventHandler DataPassEvent;
 
private void ChildrenForm_button_Click(object sender, RoutedEventArgs e)
{
    // 전달할 값을 정의
    List<string> items = new List<string> { };
    DataPassEvent(items);
}
cs

 

반응형

댓글