2014년 11월 4일 화요일

32. C# 이벤트,EVENT,Delegate(델리게이트),닷넷이벤트모델[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육]

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" />Main() {
    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  Main() {
    Application.Run(
 new  EventForm());
  }  
//main //class
 
위의 예제에서는 이벤트 처리기만을 갖추었을  이벤트 처리기를 Click 이벤트에 등록해 주지 않았으므로 다음에서 이벤트 처리기를 이벤트에 등록 해 보자
 
 
4단계: Form Click 이벤트에 이벤트 처리기 등록하기
 
이벤트 처리기를 등록하기 위해서는 Delegate 형태로 만들어서 등록해야 한 . 물론 , 등록은 Click 이벤트에 해야 하고 , Click 이벤트에 등록할 때는 반드시 Delegate 형태로 만들어서 등록을 해야 한다 .   사용되는 Delegate  바로 EventHandler 인데 앞에서 만든 이벤트 처리기를 EventHandler  만든  , EventHandler  등록하게 된다 .
 
그런데 앞에서 이벤트 처리기를 만들   매개변수 개를 맞추어  것일까? . 바로 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-272362
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111710
53 [평일전액환급실무교육]Spring,자바&JSP,안드로이드,웹퍼블리싱,… 오라클자바…03-151524
52 [주말]C#,ASP.NET마스터 오라클자바…01-311632
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-312099
50 [평일주간야간,주말]C기본&자료구조,알고리즘 오라클자바…01-311285
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191592
48 [평일야간,주말]안드로이드개발자과정(Android기초실무) 오라클자바…01-111425
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031962
46 [진짜실무교육&환급100%]SQL/자바/스프링/안드로이드/닷넷C#/웹… 오라클자바…12-272362
45 [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… 오라클자바…12-191692
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141667
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111710
42 [기업100%환급]웹퍼블리싱마스터(HTML5,CSS3,JavaScript,jQUERY) 오라클자바…12-091358
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011583
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-011761
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011237

댓글 없음:

댓글 쓰기