키보드에 대한 이벤트는 어디서 입력되어야 할까? 키보드는 특정 GUI에서 입력받는 게 아니라 폼 저체에서 입력을 받게 된다. 따라서 키보드 값을 입력받는 메소드는 폼에 속해야 한다.
키보드 이벤트를 만들려면 폼 영역을 더블 클릭 한 다음 오른쪽에 있는 속성 창 번개 모양 버튼을 누르면 된다.
KeyDown: 키를 누를 때 이벤트 발생
KeyPress: 키를 계속 누르고 있을 때 발생
KeyUp: 키를 뗄 때 발생
체감 상으로는 KeyDown과 KeyPress는 거의 비슷하다. KeyUp은 누르고 있다가 떼는 순간 일어나며, 잘 사용하지 않기 때문에 KeyDown과 KeyPress에 대해 알아보자.
- KeyDown 설정하기
1. KeyDown을 더블 클릭 해서 메소드를 생성한다.
2. 번개 아이콘 왼족 메뉴를 누르면 KeyPreview가 나타난다. 입력된 키를 출력할지 결정하는 속성이다. 출력하고 싶다면 true로 한다.
- KeyEventArgs e
키를 누르는 순간 e라는 객체를 통해서 무슨 키인지 값이 전달된다.
- e.KeyCode
이 안에 들어있는 값을 보고 어떤 키가 눌렸는지 알 수 있다.
- Keys.멤버
각 키에 대한 값
위의 표 외에도 다양한 값이 있으므로 아래에 써있는 주소에서 확인해보자.
https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.keys?redirectedfrom=MSDN&view=netframework-4.7.2
- e.KeyChar
KeyDown과 달리 KeyChar 값을 통해 글자가 뭐가 들었는지 확인한다.
- (char)Keys.멤버
반드시 캐릭터형으로 캐스팅 해줘야 한다. 입력 가능 멤버를 보면 실제 들어오는 값이 문자 한개짜리 char형 변수이기 때문이다.
소스코드
namespace Week13Programming_Ex2
{
// propfull이라고 치고 탭을 두 번 누르면 기본적인 private 변수와 속성 코드가 자동 생성된다.
class MoocFighter // 비행기를 위한 별도 클래스 생성 { private int x; private int y;
// 외부로부터 x와 y를 입력받아 MoocFighter의 x y값으로 바꿔주는 생성자
// 컨트롤 상에서 아무데나 배치해놓았을 비행기를 이 생성자로 제자리에 위치시킨다. public MoocFighter(int xPos, int yPos) { x = xPos; y = yPos; }
// getter와 setter public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } } }
최종 화면 GUI는 이렇게 구성하면 된다.
namespace Week13Programming_Ex2 { public partial class Form1 : Form { MoocFighter mf; public Form1() { InitializeComponent(); mf = new MoocFighter(0,0); }
// 폼에서 key down 이벤트 발생
private void Form1_KeyDown(object sender, KeyEventArgs e) {
// key down이니까 keycode로 가져온다. switch (e.KeyCode) { case Keys.Up: mf.Y -= 1;
// 움직일 때마다 표시해주는 좌표 값 labelLocation.Text = "X좌표: " + mf.X + " Y좌표: " + mf.Y; break; case Keys.Down: mf.Y += 1; labelLocation.Text = "X좌표: " + mf.X + " Y좌표: " + mf.Y; break; case Keys.Right: mf.X += 1; labelLocation.Text = "X좌표: " + mf.X + " Y좌표: " + mf.Y; break; case Keys.Left: mf.X -= 1; labelLocation.Text = "X좌표: " + mf.X + " Y좌표: " + mf.Y; break; } } private void pictureBox1_Click(object sender, EventArgs e) { } } }
'개발새발 개발자 > C#' 카테고리의 다른 글
[C# WPF] 데이터 바인딩 에러 처리하기 (0) | 2019.03.25 |
---|---|
[C# GUI 프로그래밍] 이미지 박스와 그래프 (0) | 2019.03.05 |
[C# GUI 프로그래밍] 전자 시계와 스톱워치 만들기 (0) | 2019.03.05 |
[C# GUI 프로그래밍] 타이머 컨트롤 이벤트 처리 (0) | 2019.03.04 |
[C# GUI 프로그래밍] 텍스트 박스와 리스트 박스 (0) | 2019.03.04 |