이번에는 키보드 입력을 받아 처리하는 방법에 대해서 알아보도록 할게요.
각 컨트롤러에서 키보드 입력(KeyDown)을 받을 수 있는데 테스트를 위해서 main window에서 어떻게 이용하는지 간략하게 설명할게요.
키보드 이벤트 등록
MainWindow.xaml에서 메인 창을 선택하고 속성 창에서 번개 모양의 <선택한 요소의 이벤트 처리기>를 클릭하면 해당 요소의 이벤트 처리를 등록할 수 있어요.
KeyDown이 키보드의 키가 눌렀을 때 발생하는 이벤트로 PreviewKeyDown, KeyDown 두 이벤트가 있는데 둘 다 키보드의 키가 눌렸을 경우 이벤트가 발생하지만 약간의 차이가 있어요.
- 이벤트 종류
Window_KeyDown
Window_PreviewKeyDown
Preview가 붙은 이벤트는 터널링 방식으로 상위 엘리먼트 -> 하위 엘리먼트로 전달되는 방식으로 만약에 다른 하위 엘리먼트에서 Preview로 이벤트를 등록했다면 MainWindow -> 해당 하위 엘리먼트 순으로 키 이벤트가 전달되는 방식이에요.
Preview가 붙지 않은 이벤트는 버블링 방식으로 Preview와 반대로 하위 -> 상위 엘리먼트로 이벤트를 전달한다고 생각하면 돼요.
- Ex
Preview(터널링) : MainWindow -> Grid -> Button
Non Preview(버블링) : Button -> Grid -> MainWindow
개발 하실 때 이벤트 필터링이 필요하다면 각 이벤트의 EventArgs 매개 변수의 Handled을 true로 설정하시면 다음 엘리먼트로 전달되지 않으니 이점 유의하세요.
테스트를 위해 MainWindow에 Window_KeyDown, Window_PreviewKeyDown를 등록하여 Console.WriteLine()을 이용하여 발생 순서를 찍으면 Preview 이벤트가 먼저 발생하는 것을 볼 수 있어요.
- 이벤트 발생 순서
Window_PreviewKeyDown
Window_KeyDown
이제 키보드의 키가 눌렸을 경우 해당 이벤트가 발생하는 것을 알았으니 어떤 키가 입력되었나 판별해보도록 할게요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine("Window_PreviewKeyDown");
Console.WriteLine(e.Key.ToString());
Console.WriteLine("------------------------------------------");
switch (e.Key)
{
case Key.A:
Console.WriteLine("A");
break;
case Key.D1:
Console.WriteLine("1");
break;
}
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
Console.WriteLine("Ctrl");
}
}
|
cs |
e.Key 값이 현재 입력된 키의 값으로 이를 이용하여 입력된 키에 대한 처리를 하면 돼요.
Ctrl, Alt 등의 키와 함께 눌린 키를 판단할 때는 17번째 줄을 참고하세요.
그럼 이상으로 포스팅을 마치며 오늘도 즐거운 코딩 하세요.
'프로그래밍 > C#, WPF, .Net' 카테고리의 다른 글
[C#] 네트워크 인터페이스 정보 가져오기 (랜 카드, NIC) (0) | 2021.03.01 |
---|---|
[C#] 소스 코드 실행 시간 측정하는 방법 (0) | 2021.02.28 |
[WPF] 프로세스가 실행 중인지 확인 방법, 프로세스 정보 가져오는 방법 (GetProcessesByName, find/get process windows title) (0) | 2020.05.16 |
[WPF] 커맨드라인 아규먼트(Command Line Arguments, 명령 인자) 받는 방법과 비주얼 스튜디오에서 명령줄 인수 입력하게 하는 방법 (0) | 2020.05.16 |
[WPF] 마우스 커서 모양 변경하는 방법 (마우스 포인터 숨기기, 보이기, 펜, mouse cursor change) (0) | 2020.05.10 |