Please Enable JavaScript!
Gon[ Enable JavaScript ]

Visual C# 두개의 폼간 데이터 주고 받기위해 delegate, event 사용

기타 언어/C# & MFC
반응형

Visual C# 두개의 폼간 데이터 주고 받기위해 delegate, event 사용

 

개발환경 : window 7 64bit, Microsoft Visual Studio 2010

 

메인폼이 있고 서브폼에서 입력한 내용을

메인에서 받아 처리할수 있는 기능을

구현하려 합니다. 두 폼간의 전송을 위해서는

delegate event 를 이용합니다.

 

C# 에서는 이벤트 메시지를 등록하고 처리할수 있도록

delegate 제공하는데 대리자라는 뜻에서 알수 있듯이

대신 실행하는 함수 포인트를 하나 만드는 것입니다.

delegate 를 이용해 포인트를 함수 만들었으면

event 를 이용해 인스턴스를 만듭니다.

만들어지 인스턴스에 함수를 등록하게 되면

호출되었을 때 등록된 모든 이벤트가 실행되게 되는 것이죠.

먼저 서브폼에 delegate event 를 생성합니다.

 

public delegate void sendUrlDelegate(string url);
public event sendUrlDelegate sendUrl;

그리고 화면에서 버튼 클릭시 텍스트박스에 URL

넣고 event 를 호출하는데 인수로 URL string 넘어갑니다.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public delegate void sendUrlDelegate(string url);
        public event sendUrlDelegate sendUrl;

        public Form2()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 저장이벤트 발생 
            this.sendUrl(txtUrl.Text);
        }
               
    }
}

메인폼으로 가서 생성자 함수에 sendUrl 이벤트에

delegate 이용해 호출할 함수포인트를 등록합니다.

 

public Form1()
{
    InitializeComponent();

    frmSubForm.sendUrl += new Form2.sendUrlDelegate(webSiteAdd);
}

webSiteAdd 함수의 원형은 서브폼에서 등록한 것처럼

인수가 string url 인 함수를 만들어 메인폼에 두면 되겠죠.

서브폼에서 이벤트를 실행하면 webSiteAdd 함수가

실행되게 되는 것입니다.

private void webSiteAdd(string url)
{
    frmSubForm.Close();
    MessageBox.Show(url);
}

메인폼에 들어간 전체 소스입니다.

btnSubForm_Click 서브폼을 여는 함수 입니다.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        Form2 frmSubForm = new Form2();

        public Form1()
        {
            InitializeComponent();

            frmSubForm.sendUrl += new Form2.sendUrlDelegate(webSiteAdd);
        }
        
        private void webSiteAdd(string url)
        {
            frmSubForm.Close();
            MessageBox.Show(url);
        }

        private void btnSubForm_Click(object sender, EventArgs e)
        {
            // 서브메뉴 띄우기 
            frmSubForm.Show();
        }
    }
}

아래는 실행되는 모습입니다.

서브폼에서 text 에 값을 넣고

메인폼으로 전송하게 되면 메시지 박스를

띄우게 되는 구조이죠.

 

반응형
Posted by 녹두장군1
,