프로그래밍/실버라이트

[실버라이트] 이벤트

쿠샨 2010. 12. 24. 10:15

이벤트 정의
     특정 동작의 발생을 알리기 위해 객체에서 보내는 메세지.
     프로그램 싱행 중에 발생하는 메세지를 의미하며 메세지를 발생시키는 객체를 '이벤트 전송자',  이벤트를 받아 처리하는
     객체를 '이벤트 수신자' 라고 합니다.


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)
  {
  }
메서드의 이름은 예제의 btnClick 이며, 
sender는 객체가 전달되는 인자로 예제에서는 버튼에 이벤트 핸들러를 연결하였으므로 해당 Button이 전달 됩니다.(그렇다고 매계변수 명을 Button 으로 하라는 의미는 절대 아닙니다. 매계 변수명은 알아서 ^^;) 
e 는 EventArgs로 이벤트의 정보가 전달 되는 인자이며 'OriginalSource' 에는 이벤트를 발생시킨 원본 객체의 정보가 들어 있습니다

           자 이제 C# 코딩으로 이벤트 핸들러 사용 까지 알아 보았습니다.
           추가 적으로 위의 이벤트 핸들러 작성 함수에서 버튼 클릭시 해당 버튼에 대한 속성 값을 변경 하고 싶은 경우에는
           object 나, OriginalSource 를 이용 하여 처리 할 수 있습니다. 단 형 변환을 해줘야 합니다.
                        (ex. Button temp_btn = (Button)sender;)

지금 까지 이벤트에 대한 정의와 간단한 사용법 이였으며, 다음 기회에는 이벤트 라우팅에 대해 포스팅 하겠습니다.