2010-06-10 7 views
2

텍스트 상자에서 다음 키보드 이벤트 - Shift + 8 (숫자 패드)을 캡처해야합니다. 이것은 또한 NumLock이 켜짐을 의미합니다. 나는 다음 SHIFT를 시도 + UP 인쇄되지 않은 경우 :합니다 (숫자 키패드에)키보드 이벤트 문제

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Shift && e.KeyCode == Keys.NumPad8) 
     Console.WriteLine("SHIFT + UP"); 

    Console.WriteLine(e.KeyCode); 
    Console.WriteLine(e.KeyData); 
    Console.WriteLine(); 
} 

그러나 CTRL + 8 노력하고 있습니다.

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.NumPad8) 
     Console.WriteLine("CTRL + UP"); 
} 

업데이트 : 다음은 단일 SHIFT + 8 인쇄기, 인쇄 :

ShiftKey 
ShiftKey, Shift 

Up 
Up 

ShiftKey 
ShiftKey, Shift 

누군가가 나를 설명 할 수 왜 SHIFT + 8을 발사하지만, CTRL + 8은되지 않는다 일?

P. + UP을 작성했습니다. 사용자가 숫자 패드 화살표와 Shift 키를 사용하여 탐색하려고하기 때문에 NumLock도 켜져 있기 때문입니다. 그래서 내가 Keys.NumPad8을 붙잡는다.

모든 최선을, 페 타르

+1

해당 메서드에 중단 점을 넣고 a) 호출되고 b) 해당 키 조합을 누를 때 실제로 전달되는 내용을 보았습니까? – Paolo

+0

메모장을 열고 문자열을 쓰고 마지막 문자열로 이동 한 다음 Shift + NumPad8을 누릅니다. 이 조합은 UpArrow와 같습니다. –

+0

@Paolo, 예. 시도했습니다. 제 질문을 업데이트했습니다. –

답변

7

그것은 작동하지 않습니다 때문에 교대 + numpad8 = UP과 함께이 키를 누를 때 : 당신이 을보다 함께 이동과 키까지 충돌하는 경우

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    string shift = e.Shift.ToString(); //false 
    string code = e.KeyCode.ToString(); //up 
} 

을 shift - true 코드 작성

따라서 & numpad8 시프트를 catch하려면 확인 키만 필요합니다.

+0

좋아요, 그렇지만 사용자가 숫자가 아닌 UP 화살표 만 누르면 이벤트가 시작됩니다. 이것을 방지하는 방법? –

+0

사용자가 UP 화살표 만 누르면 e.Shift가 false가됩니다 (구성에서). –

+0

OK, 사용자가 SHIFT + 8을 누름. e.Shift가 거짓이고 e.Keys == Keys.Up가 참입니다. 이는 키패드에없는 화살표를 누르는 것과 같습니다. 그러나 텍스트 상자에서 오른쪽 화살표를 누르면 텍스트를 탐색 할 수 있습니다. (SHIFT + 4, SHIFT + 6, SHIFT + 8 및 SHIFT + 2를 사용하여 왼쪽, 오른쪽, 위, 아래를 탐색해야합니다. –