|
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 에 값을 넣고
메인폼으로 전송하게 되면 메시지 박스를
띄우게 되는 구조이죠.
'기타 언어 > C# & MFC' 카테고리의 다른 글
| [C#] MySQL 연결후 데이터 저장, 조회 하기 (2) | 2015.01.24 |
|---|---|
| [C#] MySQL 데이터 저장시 한글이 깨질 때 (0) | 2015.01.03 |
| [Visual C#] Environment 를 통해 시스템 정보, OS 버전알아오기 (0) | 2014.11.25 |
| Visual C# 웹브라우저 WebBrowser 를 이용해 HTML 소스 가져오기 (1) | 2014.10.18 |
| Visusl C# Windows Forms Application 생성후 메지지 박스 표시하기 (0) | 2014.10.11 |
| Visual C# Form 에서 영역을 나누어 처리 위한 SplitContainer 사용법 (0) | 2014.10.05 |
| Visual C# 다중 폼간 이벤트 전달하기 (0) | 2014.10.03 |
| Visual C# Form 에 WebBrowser 클래스 이용해 웹브라우저 만들기 (2부) (0) | 2014.09.25 |
