이벤트 정의
특정 동작의 발생을 알리기 위해 객체에서 보내는 메세지.
프로그램 싱행 중에 발생하는 메세지를 의미하며 메세지를 발생시키는 객체를 '이벤트 전송자', 이벤트를 받아 처리하는
객체를 '이벤트 수신자' 라고 합니다.
Silverlight 의 이벤트 종류
입력 이벤트
- 사용자의 입력이 있는 경우 호출되는 이벤트
( 즉, 사용자가 버튼을 클릭해서 발생하는 Click 이벤트로 보면 된다.)
비입력 이벤트
- 객체의 상태가 변경된 경우 호출되는 이벤트
( 즉, 다운로드를 할 때 사용하는 WebClient 클래스는 다운로드 량이 변경될 때마다 이벤트를 발생시키는데 이처럼
사용자의 입력 없이 발생하는 이벤트)
Silverlight 이벤트 핸들러 생성 방법
이벤트 핸들러(event Handler)는 이벤트가 발새했을 때 이를 처리하는 코드를 의미 합니다.
XAML을 이용한 이벤트 핸들러 연결
- 버튼의 Click 이벤트로 예를 들어 보면, XAML에서 간단한 버튼 생성 구문은 다음과 같습니다.
<Button Width="100" Height="100" Content="이벤트 버튼" />
만들어진 버튼에 Click 이벤트 핸들러를 연결 하는 방법은 'Click' 이벤트 프로퍼티에 이벤트 핸들러 이름을 설정
하는 것입니다.
<Button Width="100" Height="100" Content="이벤트 버튼" Click="Button_Click"/>
C#(비하인드 코드 파일) 파일에 이벤트 핸들러 작성
- XAML에서 Click 이벤트 프로퍼티에 정의한 이벤트 핸들러 이름의 함수를 생성 합니다.
private void Button_Click(object sender, RoutedEventArgs e)
{
Messagebox.Show("버튼이 클릭되었습니다.");
}
여기 까지 진행 하였다면 XAML을 이용한 이벤트 처리는 끝입니다. 실행을 시켜 버튼을 클릭 하면 메세지박스가 뜨는 것
을 확인 할 수 있습니다.
C# 코드를 이용해 동적으로 이벤트 핸들러 연결
XAML이 아닌 C# 코드를 이용해 이벤트 핸들러를 연결하면 이벤트 핸들러를 원하는 시점에 연결하고 끊을 수 있는 장점
이 있다. 여기서는 XAML이 아닌 동적으로 버튼을 생성 하고 이벤트 핸들러를 사용 하는 법을 알아 보겠습니다.
Button btn_clickTest = new Button();
btn_clickTest.Content = "클릭";
btn_clickTest.Width = 100;
btn_clickTest.Height = 30;
btn_clickTest.HorizontalContentAlignment = HorizontalAlignment.Center;
btn_clickTest.Click += new RoutedEventHandler(btnClick);
빨간 구문이 버튼에 이벤트 핸들러를 연결 하는 구문 입니다.
[컨트롤 이름(ex 버튼)].[이벤트 이름(ex Click)] += new RoutedEventHandler[메서드 이름(ex. btnClick)]
컨트롤 이름은 보통 XAML에서 'x:Name' 으로 명시되어 있는 것으로 여기의 예제 에서는 btn_clickTest를 말합니다.
이벤트 이름은 이벤트의 종류로 여기에서는 버튼이 Click 되었을 때 이벤트 핸들러를 연결하고자 하기 때문에 Click
이 오게 됩니다.
메서드 이름은 이벤트가 발생했을 때 호출되는 메서드의 이름을 명시 합니다.여기에 들어갈 함수는 미리 구현되어 있
어야 합니다.
지금 까지 C# 코드를 이용해 이벤트 핸들러 연결하는 과정 이였으며, 이제는 이벤트 핸들러 메서드 작성법 입니다.
void [메서드 이름] (object sender, EventArgs e)
btn_clickTest.Height = 30;
btn_clickTest.HorizontalContentAlignment = HorizontalAlignment.Center;
btn_clickTest.Click += new RoutedEventHandler(btnClick);
빨간 구문이 버튼에 이벤트 핸들러를 연결 하는 구문 입니다.
[컨트롤 이름(ex 버튼)].[이벤트 이름(ex Click)] += new RoutedEventHandler[메서드 이름(ex. btnClick)]
컨트롤 이름은 보통 XAML에서 'x:Name' 으로 명시되어 있는 것으로 여기의 예제 에서는 btn_clickTest를 말합니다.
이벤트 이름은 이벤트의 종류로 여기에서는 버튼이 Click 되었을 때 이벤트 핸들러를 연결하고자 하기 때문에 Click
이 오게 됩니다.
메서드 이름은 이벤트가 발생했을 때 호출되는 메서드의 이름을 명시 합니다.여기에 들어갈 함수는 미리 구현되어 있
어야 합니다.
지금 까지 C# 코드를 이용해 이벤트 핸들러 연결하는 과정 이였으며, 이제는 이벤트 핸들러 메서드 작성법 입니다.
void [메서드 이름] (object sender, EventArgs e)
{
}
메서드의 이름은 예제의 btnClick 이며,
sender는 객체가 전달되는 인자로 예제에서는 버튼에 이벤트 핸들러를 연결하였으므로 해당 Button이 전달 됩니다.(그렇다고 매계변수 명을 Button 으로 하라는 의미는 절대 아닙니다. 매계 변수명은 알아서 ^^;)
e 는 EventArgs로 이벤트의 정보가 전달 되는 인자이며 'OriginalSource' 에는 이벤트를 발생시킨 원본 객체의 정보가 들어 있습니다
}
메서드의 이름은 예제의 btnClick 이며,
sender는 객체가 전달되는 인자로 예제에서는 버튼에 이벤트 핸들러를 연결하였으므로 해당 Button이 전달 됩니다.(그렇다고 매계변수 명을 Button 으로 하라는 의미는 절대 아닙니다. 매계 변수명은 알아서 ^^;)
e 는 EventArgs로 이벤트의 정보가 전달 되는 인자이며 'OriginalSource' 에는 이벤트를 발생시킨 원본 객체의 정보가 들어 있습니다
자 이제 C# 코딩으로 이벤트 핸들러 사용 까지 알아 보았습니다.
추가 적으로 위의 이벤트 핸들러 작성 함수에서 버튼 클릭시 해당 버튼에 대한 속성 값을 변경 하고 싶은 경우에는
object 나, OriginalSource 를 이용 하여 처리 할 수 있습니다. 단 형 변환을 해줘야 합니다.
(ex. Button temp_btn = (Button)sender;)
추가 적으로 위의 이벤트 핸들러 작성 함수에서 버튼 클릭시 해당 버튼에 대한 속성 값을 변경 하고 싶은 경우에는
object 나, OriginalSource 를 이용 하여 처리 할 수 있습니다. 단 형 변환을 해줘야 합니다.
(ex. Button temp_btn = (Button)sender;)
지금 까지 이벤트에 대한 정의와 간단한 사용법 이였으며, 다음 기회에는 이벤트 라우팅에 대해 포스팅 하겠습니다.
'프로그래밍 > 실버라이트' 카테고리의 다른 글
[실버라이트] 쿠키 저장 / 적용 / 삭제 방법 (0) | 2011.01.04 |
---|---|
[실버라이트] LINQ ( Language Integrated Query) (0) | 2010.12.31 |
[실버라이트] 응용 프로그램 모델 (0) | 2010.12.22 |
[실버라이트] 아키텍처 (0) | 2010.12.21 |
[실버라이트] WCF(Windows Communication Foundation) (0) | 2010.12.21 |