이벤트 개념을 잡고 이벤트를 만들어서 코드 작성을 하면 훨씬 더 좋을거 같아서 C#이 자동으로 만들어주는 이벤트를 분석해보기로 했다.
button1 을 더블 클릭하면 자동으로 코드가 만들어진다.
private void button1_Click(object sender, EventArgs e)
{
}
모든 이벤트는 이벤트를 발생시킨 객체(object) 와 해당 이벤트의 정보를 가지는 이벤트 객체로 구성되는 두개의 인자를 가진다.
Designer.cs 파일에도 자동으로 만들어진 코드가 있다.
this.button1.Click += new System.EventHandler(this.button1_Click);
이걸 분석해보자.
마우스 우클릭을 눌러서 정의 피킹(Alt + F12)을 해보면 연결된 정의가 뭔지 나온다.
이걸 도식화해서 그려봤다.
결국 .NET 기본 클래스 라이브러리에 존재하는 미리 정의된 delegate 타입을 사용한 것이다.
this.btnTest.Click += new System.EventHandler(this.MyHandler);
명칭을 변경해주면
자동으로
private void MyHandler(object sender, EventArgs e)
{
}
로 변경된다.
이벤트를 직접 만들어서 사용하려면 어떻게 해야 할까?
지정자 event event-delegate event_name;
이라는 걸 알 수 있다.
이벤트(event)는 어떤 사건이 발생했을 때 호출되어야 하는 메서드의 목록이다.
이벤트는 내부적으로 delegate로 구현되므로 이벤트를 선언하기 전에 delegate를 먼저 선언해두어야 한다.
delegate는 이벤트가 어떤 인수를 전달하는지를 정의하며, 이벤트 핸들러의 형태를 규정한다.
http://link2me.tistory.com/853 게시물의 delegate 개념 이해하기 와 http://link2me.tistory.com/856 폼간 데이터 전송 게시물에 보면 delegate 를 활용한 이벤트가 나온다.
영문 대신에 이해하기 쉽게 우리말로 적어보면
의 과정으로 동작되는 걸 알 수 있다.
- 하나의 delegate 로 여러개의 event 를 생성할 수 있다.
- 실행메서드명은 delegate 에서 정의한 이벤트핸들러 명칭 대신 다른 명칭을 사용하고 시그너처(string data)는 동일하다.
타 블로그에 작성된 글을 보고 코드를 만들어서 실행은 해봤는데 명확하게 이해가 안되었었다.
좀 더 분석을 해보니 이런 흐름이라는 걸 어렴풋이 이해하게 되었고 다음부터는 이벤트 만들어서 활용하는 걸 어렵지 않게 할 수 있을 거 같다.
빠른 개념 이해는 역시 파워포인트를 활용해서 그림으로 도식화해보는 것이다.
개념 이해가 된 상태에서 http://www.csharpstudy.com/CSharp/CSharp-delegate3.aspx 게시물을 보면 좀 더 이해하는데 도움이 된다.
델리게이트와 이벤트 핸들러에 대한 이해를 완벽하게 하려면 위 그림 가지고는 부족하다.
같은 폼내에서 이벤트 핸들러 처리하는 것은 별로 어렵지 않다.
다른 폼으로 값을 전달하기 위해서는 어떻게 해야 할까?
다른 폼에서 값을 전달받기 위해서는 어떻게 해야 할까?
'C# > Layout 및 델리게이트' 카테고리의 다른 글
C# 폼의 크기 조절 불가 (0) | 2016.01.27 |
---|---|
C# delegate 개념 이해 (0) | 2016.01.17 |
C# 델리게이트(delegate) 개념 잡히는 예제 (5) | 2016.01.17 |
C# 자식 Form 의 위치를 내마음대로 (2) | 2015.12.16 |
C# 폼크기 및 위치 저장(Properties.Settings 이용) (0) | 2015.12.03 |