티스토리 뷰
목차
반응형
C# 클래스 간 변수 공유 사용, 3가지 방법 (데이터 값 전달 예제 소스)
C# 클래스 간 변수 공유가 필요한 상황이 있습니다. C#에선 Form에서 Form으로 전달하는 게 결국 클래스 간 변수 공유나 다름없기도 하죠.
인터넷엔 C# 클래스 간 변수 공유 사용 예제가 많이 올라와 있는데, 크게 두 가지로 보입니다.
1. C# Form 요소를 public으로 변경해 다른 Form에서 바로 접근
2. C# namespace 영역에 모든 클래스와 Form을 선언함. 하나의 C# namespace로 묶음.
그러나, 안 좋은 방법.
C#이란 객체지향 언어의 캡슐화를 무참히 깨버리는 행위라 특별한 경우가 아니고서야 이렇게 쓸 이유가 없습니다. 그래서, C#의 특성인 객체지향의 원리를 살리면서 합리적인 클래스 간 변수 공유 사용 방법 3가지를 여기서 소개합니다.
[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# 객체 다른 파일 데이터 참조]
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# 예제 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# 클래스 간 변수 공유 사용, 3가지 방법 (데이터 값 전달 예제 소스)
반응형