2012-05-17 2 views
0

의 ProcessKeyPreview 사용자 컨트롤에서 keydown을 처리 할 때 다음 코드를 사용합니다. 하지만 나는 키 누르기에 대한 사용자 제어를 위해 동일한 작업을 수행 할 수있는 방법을 알고 싶습니다.bool Override C#

const int WM_KEYDOWN = 0x100; 
const int WM_KEYUP = 0x101; 

protected override bool ProcessKeyPreview(ref Message m) 
{ 
    if (m.Msg == WM_KEYDOWN && (Keys)m.WParam == Keys.A) 
    { 
     messagebox.show("You have pressed A"); 
    } 

    return base.ProcessKeyPreview(ref m); 
} 

키 누르기에서 keychar에 대해 이렇게하고 싶습니다.

이 코드는 단지 예를 들어 줘 keys.A 나를 예를 들어 작업 할 수 없습니다 된 keyChar = 'A'미리

감사

+1

키를 누를 때 키를 누르는주기가 완료됩니다. –

+0

@ Mr.Disappointment 키 누르기에서 if (e.keychar == 'A')와 같이 키의 문자를 선택하고 싶습니다. – aliboy38

답변

4

키 누르기 이벤트가에서 KeyDown과의 keyup 이벤트에서 매우 명료하다 . ProcessKeyPreview 및 ProcessCmdKey와 같은 재정의로 KeyDown 이벤트 처리를 재정의해야합니다.

이러한 재정의는 가상 키만 볼 수 있습니다.이 키는 다른 사람의 키보드에서 동일합니다. KeyDown의 기본 처리는 사용자가 선택한 특정 자판 배열을 적용하는 Windows 내 코드를 통해 가상 키를 보냅니다. 그리고 그 키보드가 "a"나 "A"와 같은 타이핑 키를 생성한다면, 이 KeyPress 이벤트를 생성합니다. 포커스가있는 컨트롤에 직접 전달되는 컨트롤은 KeyPress 이벤트에 대한 이벤트 처리기를 구현하여 컨트롤에서 가로 채기 만 할 수 있습니다.

이전 단락의 I-don't-know-what 절이 중요한 부분입니다. 타이핑 키를 가로 채려는 것이 일반적으로 의미가 없습니다. "a"와 "A"의 구별이 짧다면, 평생 동안 "A"를 입력하지 않은 20 억 명의 잠재 사용자가있을 수 있습니다. 그렇지 않다면 정확하게 이 분명하지 않습니다. 당신이 이것을 시도하고 있으므로 다른 접근법을 제안 할 수 없습니다.

+0

예를 들어 A에 대해 이야기하고있었습니다. 어쩌면 숫자 키패드를 누를 수도 있습니다. – aliboy38