SSISO Community

갤러리정

일반적인 이벤트(GUI Event) - CSharp

12.7 일반적인 이벤트(GUI Event)

 

일반적인 C#에서 등장하는 GUI 이벤트 모델을 살펴보겠습니다. 이벤트 모델은 전체 Visual C# 가장 일반적인 모델이며 정규화된 모델이기 때문에 여러분들은 모델 하나만을 숙지하시면 C# 전체의 이벤트 모델을 이해하셨다고 보셔도 좋습니다.

 

절에서는 윈도우 폼을 생성한 사용자가 폼을 클릭했을 폼의 클릭(Click) 해당하는 이벤트의 처리과정을 알아보도록 하겠습니다.

 

1단계: GUI 이벤트를 테스트하기 위한 윈도우 만들기

윈도우 이벤트 모델을 이해하기 전에 먼저 Form 하나 만들고 폼을 화면상에 디스플레이하는 프로그램을 작성하도록 하겠습니다. GUI 이벤트 모델의 기본이 되는 프레임 하나 정도는 있어야겠죠. C#에서 Visual Tool 이용하셔도 되지만 여기서는 직접 수작업으로 작성하도록 하겠습니다.

 

&

EventFormTest.cs

Ü 윈도우 만들기

using System;
using System.Windows.Forms;

public class 
EventForm : Form{
//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

 

위와 같이 간단하게 윈도우 폼을 하나 생성했습니다.

 

2단계: 폼에 등록된 이벤트 찾기(Click)

화재, 도난과 교통사고 등의 이벤트가 존재하는 것처럼 윈도우 폼에도 미리 등록된 이벤트가 존재합니다. 이러한 이벤트는 여러분이 필요할 찾아서 사용하시면 됩니다.

 

그림 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 등록하게 됩니다.

 

그런데, 여러분이 앞에서 이벤트 처리기를 만들 매개변수 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

 

5단계: Click 이벤트 발생, 이벤트, 이벤트 처리

Click 이벤트가 발생되는 곳은 어디일까요? 클릭이벤트가 발생되는 곳은 바로 여러분이 Form 클릭하는 순간입니다. 이번 예제의 이벤트는 Click이며, 이벤트 처리기는 ClickReceive() 메서드입니다. 그리고, 이벤트를 발생시키는 주체는 User 되는 것입니다.

 

Event 처리 순서

1.       User 폼을 클릭한다.(Click 이벤트 발생)

2.       폼의 Click 이벤트에 연결된 이벤트 처리기를 찾는다.(등록된 EventHandler 검색)

3.       이벤트 처리기를 호출한다.(EventHandler 호출, 매개변수로 호출자와 이벤트의 정보를 주고 EventHandler 호출한다)

4.       EventHandler 포함된 메서드를 호출하여 작업을 처리한다.

 

이것으로 우리는 가장 일반적인 GUI 모델에서 이벤트가 발생하는 것에 대해서 알아보았습니다.

1445 view

4.0 stars