티스토리 뷰

목차

    반응형

    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가지 방법 (데이터 값 전달 예제 소스)

    반응형