본문 바로가기
C++ 200제/코딩 IT 정보

C# 클래스 간 변수 공유 사용, 3가지 방법 (데이터 값 전달 예제 소스)

by vicddory 2017. 12. 24.

C# 클래스 간 변수 공유 사용, 3가지 방법 (데이터 값 전달 예제 소스)


C# 클래스 간 변수 공유가 필요한 상황이 있습니다. C#에선 Form에서 Form으로 전달하는 게 결국 클래스 간 변수 공유나 다름없기도 하죠.


인터넷엔 C# 클래스 간 변수 공유 사용 예제가 많이 올라와 있는데, 크게 두 가지로 보입니다.


1. C# Form 요소를 public으로 변경해 다른 Form에서 바로 접근

2. C# namespace 영역에 모든 클래스와 Form을 선언함. 하나의 C# namespace로 묶음.


그러나, 안 좋은 방법.


C#이란 객체지향 언어의 캡슐화를 무참히 깨버리는 행위라 특별한 경우가 아니고서야 이렇게 쓸 이유가 없습니다. 그래서, C#의 특성인 객체지향의 원리를 살리면서 합리적인 클래스 간 변수 공유 사용 방법 3가지를 여기서 소개합니다.


C Sharp 클래스 간 변수 공유 사용[C# 객체 다른 파일 데이터 참조]

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# 클래스 간 변수 공유 사용, 3가지 방법[C# 객체 다른 파일 데이터 참조]


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# 클래스 변수 공유[C# 객체 다른 파일 데이터 참조]

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


C#이란 객체지향의 의미와 원리를 지키면서도 Form간 데이터 전달을 할 수 있게 됐습니다.


자식폼 부모폼 c# 공유[C# 객체 다른 파일 데이터 참조]


세 가지 방법 중 상황에 맞도록 유연하게 사용하세요.


C# 클래스 간 변수 공유 사용, 3가지 방법 (데이터 값 전달 예제 소스)

댓글