Computer/Tips

[C#] 폼간 데이터 전송

창천(蒼天) 2019. 7. 22. 11:39

출처:Form간 데이터 전달 시, 상황에 맞는 응용 방법

 

 

참고 사이트

 Trnsfer data between forms c#

 C#, Form-Form 데이터 전달

 자식폼에서 부모폼으로 이벤트 전달

 

 

 

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

// 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;

            }

        }

    }

 

// 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; }

        }

    }

 

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

[자식폼]

// 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();

}

[부모폼]

// 자식폼을 실행할 때 자식폼에 설정되어있는 이벤트에 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("이벤트 실행");

}

 

3. 많은 폼이 활성화된 상태일 때, 상호 유기적인 데이터 교환을 원할 때(Interface를 사용하여 데이터를 가져올 때 - OOP에 가장 맞는 방법이라 생각됨. Interface 자체가 이런거 하려고 만들어진 거라서.)

    public interface IMyInterface

    {

        void SetData(String Data);

    }

 

    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;

        }

    }

 

 

    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);

        }

    }

 

 

출처: http://blog.daum.net/shininglake/8167346