화면 예시

- 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.
'.NET > Winforms' 카테고리의 다른 글
| [WINFORMS][DevExpress] GridControl - Focused Row (0) | 2023.08.22 |
|---|---|
| [WINFORMS][DevExpress] GridControl - GirdView.ColumnFilterChanged 컬럼 필터 이벤트 (0) | 2023.08.21 |
| [WINFORMS] Control.ControlCollection 메소드 (0) | 2023.08.16 |
| [WINFORMS] Tab Control (0) | 2023.08.16 |
| [WINFORMS] MessageBox validation (0) | 2023.08.15 |