사용자 정의 이벤트 만들기




 .NET Framework 이 발생시키는 시스템 이벤트와는 별도로 사용자가 직접 이벤트를 정의하여 사용할 수 있다. 사용 목적은 여러가지 있겠으나 데이터 교환의 목적으로 사용 되기도 한다.
즉, 두 폼간의 데이터 전달 또는 폼과 클래스 라이브러리(DLL)간 데이터 교환에 이벤트가 이용된다.

 form1 과 form2 간의 사용자 정의 이벤트 만들기를 예로 들어본다.
form2에서 이벤트를 발생 시키고 데이터를 form1으로 보내는 예이다.

 이벤트를 발생 시키는 form2 의 코드는 다음과 같다.

// 이벤트 정의
public delegate void EventHandler(object sender, EventArgs e);

public partial class form2 : Form
{
    // 이벤트 선언
    public event EventHandlerHandler eReceiveMsg;

    public form2()
    {
        InitialzeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // 이벤트 호출
        eReceiveMsg(this, e);
    }
}


1. delegate 를 이용하여 이벤트를 정의한다.
    정의할 이벤트가 사용할 이벤트 핸들러의 리턴값 및 인수를 정의해 준다.
2. 이벤트 선언
   사용할 이벤트를 선언해 준다.
3. 이벤트 호출
   이벤트를 호출 할 특정 위치에서 이벤트를 호출한다. 이벤트에 전달할 인수를 맞쳐준다.


 이벤트를 받는 쪽 즉, form1의 코드는 대략 다음과 같다.

Form frm2 = new Form2(this);
frm2.eReceiveMsg += new EventHandler(OnReceiveMsg);
frm2.Show();

private void OnReceiveMsg(object sender, EventArgs e)
{
    SetMsgTextBox("JJ");
}

public void SetMsgTextBox(string strSetText)
{
    MessageBox.Show(strSetText);
}
form1 에서 form2 의 객체를 참조 시키고
form2 의 객체를 생성한다.
form2 에서 선언한 이벤트에 이벤트 핸들러를 추가 시킨다.

이벤트 핸들러를 추가 시키는 함수는 (여기서 EventHandler) form2 에서 정의한 이벤트 선언이다.
원래대로 쓰자면 form2 의 네임스페이스.클래스이름.EventHandler 로 써줘야 한다.

여기서 OnReceiveMsg 메소드를 연결시켜 주었는데 메소드의 선언 형식이 form2 에서 정의한 이벤트 핸들러 형식과 일치해야한다.
Posted by six605
,