2010-03-12 4 views
1

일부 제어에서는 사용자가 누른 키가 ALT 및 알파벳의 문자 인 경우 ProcessCmdKey가 true를 반환하도록합니다.C# ProcessCmdKey 오버로드, 일치하는 일반 조합

사용자가 다음 코드로 Alt 키를 누르면 true를 반환 할 수 있지만 문자를 눌렀을 때도 어떻게 추가 할 수 있습니까?

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
      if ((keyData & Keys.Alt) != 0) { 
        return true; 
      } 
} 

감사합니다.

+0

코드는 Alt 키에 대한 테스트 아래의 경우에는 반환 값이 없기 때문에 그대로 사실이 아니다 컴파일되지 않습니다. ProcessCmdKey를 오버 라이딩하는 것이 좋습니다. return base.ProcessCmdKey (ref msg, keyData); 핵심 이벤트를 처리하지 않은 경우 : http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey.aspx 아래의 Henrik의 대답은 필요한 정확한 테스트를 제공합니다. – BillW

답변

4

if ((keyData & Keys.Alt) != 0 && (keyData & Keys.KeyCode) >= Keys.A && (keyData & Keys.KeyCode) <= Keys.Z) 
+0

대단히 감사합니다. keyData & Keys.KeyCode가 반환하는 것과 그 이유는 무엇입니까? 특히 Keys.KeyCode 란 무엇입니까? 고마워요. – leo

+0

Keys.KeyCode는 최하위 16 비트가 설정된 비트 마스크입니다. 키를 마우스 오른쪽 버튼으로 클릭하고 "정의로 이동"을 선택하여 확인하십시오. 또한 MSB가 설정된 비트 마스크 Keys.Modifiers가 있습니다. – Henrik

+0

헨릭에게 감사드립니다. – leo

0

XOR 작동합니다 :

if ((keyData & Keys.Alt) == Keys.Alt & (keyData^Keys.Alt) != 0) { 
     return true; 
} 
+1

"keys.Alt"는 "Keys.Alt"이어야합니다. Alt 키를 누를 때마다 'true'를 반환하고 alt 키가 눌려져있는 동안 다른 키를 누를 때마다 true를 반환합니다. 단어는 "알파벳의 모든 문자"를 기준으로 필터링하지 않습니다. – BillW