프로그래밍 기술/WPF

[WPF] 3.4 이벤트 처리

언제나휴일 2016. 4. 19. 07:53
반응형

3.4 이벤트 처리

 

 WPF에서도 Windows Form처럼 개체를 생성하거나 활성화 및 비 활성화, 창을 닫히는 시점에 개발자가 원하는 처리를 위해 이벤트 방식을 사용합니다. 여기에서는 몇 가지 이벤트를 처리하는 것에 대해서만 소개를 할 것이며 좀 더 자세한 사항은 MSDN을 참고하시기 바랍니다.

 

3.4.1 이벤트 핸들러 추가하기

 

 이벤트 핸들러 추가는 xaml 파일에 태그에 이벤트 핸들러를 설정하고 cs 소스 파일에 이벤트 핸들러를 작성합니다. 또한 xaml 파일을 사용하지 않고 cs 소스 파일에서 이벤트 핸들러를 등록하는 코드도 작성할 수 있습니다.


이벤트 핸들러 추가하기

[그림 3.3] 이벤트 핸들러 추가하기

 

 통합 개발 환경에서는 뛰어난 인텔리센스를 지원하여 편리하게 개발할 수 있습니다. xaml 파일의 태그에 처리할 이벤트 명과 =를 쓰는 순간 이벤트 핸드러를 추가할 수 있게 도와줍니다. 또한 이벤트 명의 앞부분을 쓰면서 나오는 선택 창이 자신이 원하는 이벤트를 선택하여 탭을 연속으로 2번 눌러서 이벤트 핸들러를 추가할 수도 있습니다.


향상된 인텔리센스

[그림 3.4] 향상된 인텔리센스

 

 이처럼 xaml 파일에서 개발 도구의 인텔리센스 기능을 사용하여 이벤트 핸들러를 설정하면 cs 파일에 이벤트 핸들러가 만들어집니다. 물론 이벤트 핸들러 내부에서 처리해야 할 일은 개발자가 작성합니다.

 

Window1.xaml

<Window x:Class="Ex_윈도우_이벤트_핸들러_추가하기.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window1" Height="300" Width="300"

    Activated="Window_Activated" Closed="Window_Closed" >

    <Grid>

    </Grid>

</Window>

 

Window1.xaml.cs

using System;

using System.Windows;

 

namespace Ex_윈도우_이벤트_핸들러_추가하기

{

    public partial class Window1 : Window

    {

        public Window1()

        {

            InitializeComponent();

        }

        private void Window_Activated(object sender, EventArgs e)

        {

            Title = "창이 활성화 되었음";

        }

        private void Window_Closed(object sender, EventArgs e)

        {

            MessageBox.Show("창이 닫혔음");

        }

    }

} 

  

 다음은 xaml 파일의 태그를 이용하지 않고 cs 파일에서 이벤트 핸들러를 추가하는 예제입니다.

 

Window1.xaml.cs

using System;

using System.Windows;

 

namespace Ex_윈도우_이벤트_핸들러_추가하기

{

    public partial class Window1 : Window

    {

        public Window1()

        {

            InitializeComponent();

            this.Closed += new EventHandler(Window1_Closed);

        }

        void Window1_Closed(object sender, EventArgs e)

        {

            MessageBox.Show("창이 닫혔음");

        }

    }

} 

  

 cs 파일에서 이벤트 핸들러를 추가할 때도 이벤트 명과 +=를 입력한 후에 탭을 2번 누르면 인텔리센스 기능을 통해 이벤트 핸들러를 만들 수 있습니다.

 

 그리고 이벤트 핸들러를 추가하지 않고 On으로 시작하는 메서드를 재정의하여 같은 목적을 달성할 수 있습니다. 주의할 점은 기반 클래스에서 기본적으로 처리하는 것을 재정의에 포함할 것인지 배제할 것인지를 신중하게 결정하는 것입니다.

 

protected override void OnClosed(EventArgs e)

{

    base.OnClosed(e);

    MessageBox.Show("창이 닫혔음");

}


3.4.2 Closing 이벤트 사용 예 – Window 닫을 것인지 확인하기

 

 실제 프로그램을 작성할 때는 목적에 따라 다양한 이벤트 처리를 구현하겠죠. 여기에서는 Window 닫기를 선택하면 사용자에게 다시 확인하여 닫거나 닫지 않게 하는 것을 해 봅시다.

 

 Window의 닫기 버튼을 누르면 Closing 이벤트가 발생합니다. 사용자에게 Window를 닫기 전에 다시 한 번 의사를 묻고 이에 따라 처리하기를 원한다면 Closing 이벤트 핸들러를 추가하여 원하는 기능을 구현합니다. 만약 사용자 의사에 따라 Window를 닫지 않게 하려면 이벤트 인자 (두 번째 입력인자)Cancel 속성을 True로 설정합니다.

 

private void Window_Closing(object sender, CancelEventArgs e)

{

    if (MessageBox.Show("정말로 창을 닫을까요?", "창 종료 확인",

        MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)

    {

        e.Cancel = true;

    }

}

반응형