32. C# 이벤트,EVENT,Delegate(델리게이트),닷넷이벤트모델:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
과거에 어디에선가 받은 자료인데 그 내용을 아래에 소개합니다.
이 이벤트 모델은 전체 Visual C# 의 가장 일반적인 모델이며 정규화된 모델이기 때문에 여러분들은 이 모델 하나만을 숙지하시면 C# 전체의 이벤트 모델을 이해하셨다고 보셔도 좋다. 이번에는 윈도우 폼을 생성한 뒤 사용자가 폼을 클릭했을 때 폼의 클릭 (Click) 에 해당하는 이벤트의 처리과정을 알아볼 것이다.
1단계: GUI 이벤트를 테스트하기 위한 윈도우 폼 만들기
윈도우 이벤트 모델을 이해하기 전에 먼저 Form 을 하나 만들고 그 폼을 화면상에 디스플레이하는 프로그램을 작성하도록 하겠다 .
&
|
EventFormTest.cs
|
Ü 윈도우 폼 만들기
|
using System;
using System.Windows.Forms; public class EventForm : Form{ } //class public class EventFormTest{ static void :namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> Application.Run( new EventForm()); } //main} //class | ||
C:\C#Example\12>csc EventFormTest.cs
C:\C#Example\12>EventFormTest
:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
|
위와 같이 간단하게 윈도우 폼을 하나 생성했다 .
2.
화재 , 도난과 교통사고 등의 이벤트가 존재하는 것처럼 윈도우 폼 에도 미리 등록된 이벤트가 존재 하는데 . 이러한 이벤트는 여러분이 필요할 때 찾아서 사용하시면 된다 .
그림 12-3 VS.NET IDE 에서 보여지는 이벤트
비쥬얼 툴 내에서 소스 코드를 작성할 때 폼에 대한 참조값을 사용하면 위와 같은 드롭다운 정보를 자동으로 보여주며 이 때 번개모양을 한 것이 바로 이벤트에 해당한다. 즉 , 미리 등록된 이 이벤트가 존재한다는 것이다 . 아래의 표는 Form 에서 사용할 수 있는 이벤트들의 목록 이다.
Form 에서 사용할 수 있는 이벤트들
|
Activated, BackColorChanged, BackgroundImageChanged, BindingContextChanged, CausesValidationChanged, ChangeUICues, Click, Closed, Closing, ContextMenuChanged, ControlAdded, ControlRemoved, CursorChanged, Deactivate, Disposed, DockChanged, DoubleClick, DragDrop, DragEnter, DragLeave, DragOver, EnabledChanged, Enter, FontChanged, ForeColorChanged, GiveFeedback, GotFocus, HandleCreated, HandleDestroyed, HelpRequested, ImeModeChanged, InputLanguageChanged, InputLanguageChanging, Invalidated, KeyDown, KeyPress, KeyUp, Layout, Leave, Load, LocationChanged, LostFocus, MaximizedBoundsChanged, MaximumSizeChanged, MdiChildActivate, MenuComplete, MenuStart, MinimumSizeChanged, MouseDown, MouseEnter, MouseHover, MouseLeave, MouseMove, MouseUp, MouseWheel, Move, Paint, ParentChanged, QueryAccessibilityHelp, QueryContinueDrag, Resize, RightToLeftChanged, SizeChanged, StyleChanged, SystemColorsChanged, TabIndexChanged, TabStopChanged, TextChanged, Validated, Validating, VisibleChanged
|
표 12-4 Form 에 사용할 수 있는 이벤트들
이러한 이벤트들은 여러분이 폼을 띄웠을 때 작동하는 것도 있으며 작동하지 않는 것도 있습니다. 이 많은 이벤트들이 하나의 모델로 동작한다는 것은아주 신기한 일이다 . 즉 어떠한 이벤트가 등록되었는지를 확인하고 그 이벤트를 수신하는 측과 연결해 주는 것이다 . 이 중에서 우리는 Click 이벤트의 처리기 를 만들어 볼 것이다.
3단계: Click 이벤트 처리기(Event Handler) 만들기
Click 이벤트의 처리기를 만드는 방법은 일반적인 메서드를 만드는 방법과같다 . 하지만 , 여기서 주의해야 하는 것이 바로 메서드의 매개변수 이다 .메서드를 만들 때의 형식은 다음과 같다 .
이벤트 처리기 (EventHandler) 의 형태
|
private void ClickReceive(object sender, EventArgs e){
}
|
표 12-5 이벤트 처리기 (EventHandler)
매개변수 중 Object sender 는 메시지가 어디서 발생하는지 발생된 곳의 참조값을 의미하며 , EventArgs e 는 이벤트의 데이터를 담고 있는 매개변수 이다 . 이 두가지의 매개변수는 바꿀 수 없으며 항상 위와 같은 규칙으로 사용해야 한다 . 이벤트 처리기까지 포함한 소스는 다음과 같다 .
&
|
EventFormTest.cs
|
Ü 윈도우 폼에서 이벤트 수신할 메서드 추가
|
using System;
using System.Windows.Forms; public class EventForm : Form{ private void ClickReceive(object sender, EventArgs e){ MessageBox.Show( "Hello World!" ); } } //class public class EventFormTest{ static void Application.Run( new EventForm()); } //main} //class |
위의 예제에서는 이벤트 처리기만을 갖추었을 뿐 이벤트 처리기를 Click 이벤트에 등록해 주지 않았으므로 다음에서 이벤트 처리기를 이벤트에 등록 해 보자
4단계: Form의 Click 이벤트에 이벤트 처리기 등록하기
이벤트 처리기를 등록하기 위해서는 Delegate 형태로 만들어서 등록해야 한다 . 물론 , 등록은 Click 이벤트에 해야 하고 , Click 이벤트에 등록할 때는 반드시 Delegate 형태로 만들어서 등록을 해야 한다 . 이 때 사용되는 Delegate 가 바로 EventHandler 인데 앞에서 만든 이벤트 처리기를 EventHandler 로 만든 후 , EventHandler 를 등록하게 된다 .
그런데 앞에서 이벤트 처리기를 만들 때 왜 매개변수 2 개를 맞추어 준 것일까? . 바로 EventHandler 가 아래와 같은 모양을 하고 있기 때문에, EventHandler 델리게이트와 메서드를 맞추어 주기 위해서 였다 .
public delegate void EventHandler(object sender,EventArgs e);
다음은 EventHandler 를 만들어서 Click 이벤트에 등록하는 완성된 예제다 .
&
|
EventFormTest.cs
|
Ü 윈도우 폼에서 이벤트 수신할 메서드 추가
|
using System;
using System.Windows.Forms; public class EventForm : Form{ public EventForm(){ this.Click += new EventHandler(ClickReceive); // 이벤트 처리기 등록하는 부분 } private void ClickReceive(object sender, EventArgs e){ MessageBox.Show( "Hello World!" ); } } //class public class EventFormTest{ static void Main() { Application.Run( new EventForm()); } //main} //class | ||
C:\C#Example\12>csc EventFormTest.cs
C:\C#Example\12>EventFormTest
|
[진짜실무교육&환급100%]SQL/자바/스프링/안드로이드/닷넷C#/웹… | 12-27 | 2362 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1710 | ||
53 | [평일전액환급실무교육]Spring,자바&JSP,안드로이드,웹퍼블리싱,… | 03-15 | 1524 | |
52 | [주말]C#,ASP.NET마스터 | 01-31 | 1632 | |
51 | [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… | 01-31 | 2099 | |
50 | [평일주간야간,주말]C기본&자료구조,알고리즘 | 01-31 | 1285 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1592 | |
48 | [평일야간,주말]안드로이드개발자과정(Android기초실무) | 01-11 | 1425 | |
47 | [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… | 01-03 | 1962 | |
46 | [진짜실무교육&환급100%]SQL/자바/스프링/안드로이드/닷넷C#/웹… | 12-27 | 2362 | |
45 | [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… | 12-19 | 1692 | |
44 | [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… | 12-14 | 1667 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1710 | |
42 | [기업100%환급]웹퍼블리싱마스터(HTML5,CSS3,JavaScript,jQUERY) | 12-09 | 1358 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1583 | |
40 | [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… | 12-01 | 1761 | |
39 | [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) | 12-01 | 1237 |
댓글 없음:
댓글 쓰기