2013-12-10 3 views
1

다음 코드를 사용하여 NumLock, CapsLock 또는 Insert를 누른 상태인지 확인하고 상태가 ON이면 그에 따라 레이블의 텍스트를 업데이트하십시오. 그러나 어떤 이유로 나는 NumLock을 제대로 작동시키지 못합니다. NumLock이 켜져 있으면 NumLock을 설정했지만 NumLock을 설정하지 않으면 업데이트 할 수 없으면 레이블의 텍스트를 "Num"로 업데이트합니다. 다른 모든 코드 검사가 작동합니다. 어떤 도움을 주시면 감사하겠습니다. 고맙습니다.NumLock isKeyLocked not working

 private void num_ins_caps_keyDown(object sender, KeyEventArgs e) 
    { 
     if ((e.KeyCode & Keys.KeyCode) == Keys.CapsLock) 
     { 
      if (Control.IsKeyLocked(Keys.CapsLock)) 

       num_ins_caps1.capsLabel.Text = "Caps"; 
      else 
       num_ins_caps1.capsLabel.Text = null; 
     } 

     if ((e.KeyCode & Keys.KeyCode) == Keys.NumLock) 
     { 
      if (Control.IsKeyLocked(Keys.NumLock)) 

       num_ins_caps1.numLabel.Text = "Num"; 
      else 
       num_ins_caps1.numLabel.Text = null; 
     } 

     if ((e.KeyCode & Keys.KeyCode) == Keys.Insert) 
     { 
      if (Control.IsKeyLocked(Keys.Insert)) 

       num_ins_caps1.insLabel.Text = "Ins"; 
      else 
       num_ins_caps1.insLabel.Text = null; 
     } 
    } 
+0

답변에 점수가 누락 된 경우 알려주십시오. – paqogomez

+0

KeyDown의 표준 채찍. 대신 ProcessCmdKey()를 재정의하십시오. –

답변

2

난 당신이에서이 전화하고 어디 모르겠지만, 당신은 몇 가지 컨트롤의 KeyDown 이벤트를 사용하는 경우, 대신 KeyUp 이벤트를보십시오.

코드를 테스트 한 결과 동일한 문제가 발생했습니다. 나는 그것이 KeyDown과 함께 작동하지 않는 이유를 모르지만, KeyUp 이벤트에 첨부하면 예상대로 작동했습니다.

나는 "의"있는 Numlock 회전에서 신호가 KeyDown 이벤트가 발생하기 전에 보내 겠지,하지만 있는 Numlock의 신호는 "OFF"는 KeyDown 이벤트가 발생 후 전송 켜기 때문에 코드가 실행 여전히 그것이 가능하다고 생각합니다. 문제를 설명하는 데는 msdn docs에 아무것도 없습니다.