개발/C#

[팁] 폼(클래스)간 변수공유

FA1976 2018. 4. 16. 10:57

C# 예제 1. 자식폼 종료 시, 부모폼으로 데이터 전송

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// main form to read data set in child form / dialog    
public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        DraftForm form = new DraftForm();
 
        if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            textBox1.Text = form.DraftNumber;
        }
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// another form where data is read from
public partial class DraftForm : Form
{
    public DraftForm()
    {
        InitializeComponent();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        DialogResult = System.Windows.Forms.DialogResult.OK;
    }
 
    public string DraftNumber
    {
        get { return this.textBox1.Text; }
    }
}
cs

C# 예제 2. 자식폼만 활성화, 부모폼으로 여러 데이터를 전송할 때


1
2
3
4
5
6
7
8
9
10
11
12
[자식폼]
// delegate 이벤트선언
public delegate void FormSendDataHandler(object obj);
public event FormSendDataHandler FormSendEvent;
 
// 창을 닫을 때 FormSendEvent 이벤트를 실행한다. 파라미터로 object 를 하나 넘긴다.
private void btnFormClose_Click(object sender, EventArgs e)
{
   int no = cboDisSystem.SelectedIndex;
   this.FormSendEvent(disSystemNo[no]);
   this.Dispose();
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[부모폼]
// 자식폼을 실행할 때 자식폼에 설정되어있는 이벤트에 DieaseUpdateEventMethod
// 실행할 메소드명을 등록한다. 자식폼에서 이벤트를 실행하면 이 메소드가 실행될것이다.
private void btnReasonAdd_Click(object sender, EventArgs e)
{
    FrmAdd frm = new FrmAdd ();
    frm.FormSendEvent += new FrmAdd.FormSendDataHandler(DieaseUpdateEventMethod);
    frm.ShowDialog();
}
 
private void DieaseUpdateEventMethod(object sender)
{
    Console.WriteLine("이벤트 실행");
}
cs


C# 예제 3. 많은 폼이 활성화된 상태, 상호 유기적인 데이터 교환을 원할 때 (추천)


1
2
3
4
public interface IMyInterface
{
    void SetData(String Data);
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public partial class Form1 : Form, IMyInterface
{
    public Form1()
    {
        InitializeComponent();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this as IMyInterface);
        frm.Show();
    }
 
    public void SetData(String Data)
    {
        textBox1.Text = Data;
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public partial class Form2 : Form
{
    private IMyInterface frm = null;
 
    public Form2(IMyInterface frm)
    {
        InitializeComponent();
 
        this.frm = frm;
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        frm.SetData(textBox1.Text);
    }
}
cs



출처: http://codingcoding.tistory.com/545 [코딩 기록]