윈폼(via C#)으로 각종 툴, 어플리케이션을 만들 때 유저키덕후들을 위한 단축키가 필요할 수 있다. 마우스라는 혁신적인 입력 장치가 있더라도 숙련되면 키보드 이상가기 힘드니까 :)
언뜻 생각하기에는 System.Windows.Forms.Form 클래스에서 KeyDown 이벤트를 잡아서 처리를 하면 될 것 같아 해보았지만, 동작하지 않는다 ㅇㅂㅇ;;
Google신(MS는 Bing신...)에 문의 결과 ProcessCmdKey 메소드를 오버라이드 한다면 된다고 한다. 간단히 해보면 다음과 같다.
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (!base.ProcessCmdKey(ref msg, keyData)) // 위에서 처리 안했으면
{
// 여기에 처리코드를 넣는다.
if (keyData.Equals(Keys.F1))
{
// 이런 식으로 처리.
return true;
}
else
{
return false;
}
}
else
{
return true;
}
{
if (!base.ProcessCmdKey(ref msg, keyData)) // 위에서 처리 안했으면
{
// 여기에 처리코드를 넣는다.
if (keyData.Equals(Keys.F1))
{
// 이런 식으로 처리.
return true;
}
else
{
return false;
}
}
else
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
위 코드에서 return false; 의 의미는 내가 처리를 안했으니 혹시나 자식 클래스에서 오버라이드 할꺼면 밑에서 처리해라~ 라는 의미이다. 반대로return true; 는 밑에서 처리하지 말라는 소리다. 마찬가지로 base.ProcessCmdKey가 거짓일 때만 처리하는 것도 부모 클래스에서 키입력에 대해서 처리를 했다면 처리를 하지 않는다는 의미이다.
아무튼, 이리하여 간단히 단축키를 구현할 수 있다.
출처 : http://zeru.kr/blog/539
'2_ 바삭바삭 프로그래밍 > C# and Visual C++' 카테고리의 다른 글
[C#] 프로그램을 시작할때 (파일출력 프로토타입) (0) | 2013.02.14 |
---|---|
[C#] 윈폼기반 프로그래밍을 할때 Invoke() 이쁘게쓰기! (0) | 2013.02.08 |
[C#] 폼 드래그 할때 이동 (0) | 2012.10.05 |
[C#] 파일 입출력 (0) | 2012.08.24 |
[C#] 웹페이지 긁어오기, 날씨 API (3) | 2012.08.21 |