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 |