2010-01-04 3 views
3

동료 인 here과 비슷한 것을 이루려고 노력하고 있습니다. 그러나 대답을 보면 큰 문제는 아니지만 약간의 버그가 있습니다. 사용자로부터 추악한 경우 POV :C# (VS2008) 한정자 키의 키 코드는 표시되지 않지만 한정자는 유지

키 누르기 데이터를 텍스트 상자에 넣으면 사용자가 문자 앞에있는 한정자 키를 누르면 해당 텍스트 상자가 수식어의 키 이름을 포함하여 채워집니다. 즉, "CTRL + SHIFT + ShiftKey"와 같은 결과가 나타납니다. 마지막 키 코드를 억제하기 위해 노력하는 모든 것은 실제 키도 억제합니다.

이것은 내가 바라는 억압없이 내 기본 시도입니다 (단점을 용인하십시오. 나는 그것을 무너 뜨 렸으며, 내 자신의 것으로 이것을 해결하려고 노력했습니다).

String pressed =""; 
e.SuppressKeyPress = true; 
if ((e.Modifiers & Keys.Control) > 0) 
{ 
    pressed += "CTRL + "; 
} 
if ((e.Modifiers & Keys.Alt) > 0) 
{ 
    pressed += "ALT + "; 
} 
if ((e.Modifiers & Keys.Shift) > 0) 
{ 
    pressed += "SHIFT + "; 
} 


    pressed += e.KeyCode; 


    txtCopyKey.Text = pressed; 

나는 여기에 내가 묻는 바에 대해 충분히 명확하게 바라기를 바랍니다.

+4

당신은 아마 도망가 겠지만, * 엄격하게 * 당신은'사용해야 = 0 ' 여기서 MSB가 설정되어있는 것처럼'> 0 '이 아니라면 음수로 표시됩니다. –

+0

네 말이 맞아. 나는 그것을 고쳤다. 고맙습니다. – GeminiDomino

답변

3

무엇이 솔루션에 대한 모드 :

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    StringBuilder sb = new StringBuilder(); 

    if (e.Control) 
    { 
     sb.Append(Keys.Control.ToString()); 
     sb.Append(" + "); 
    } 

    if (e.Alt) 
    { 
     sb.Append(Keys.Alt.ToString()); 
     sb.Append(" + "); 
    } 

    if (e.Shift) 
    { 
     sb.Append(Keys.Shift.ToString()); 
     sb.Append(" + "); 
    } 

    if (e.KeyCode != Keys.ShiftKey 
     && e.KeyCode != Keys.ControlKey 
     && e.KeyCode != Keys.Menu) 
    { 
     sb.Append(e.KeyCode.ToString()); 
    } 

    textBox1.Text = sb.ToString(); 
} 
+0

저에게 그런 일이 일어났습니다. 나는 그것을하기에 더 우아한 방법을 놓치고 싶지 않았 으면 좋겠다. 감사합니다. – GeminiDomino

+0

* 우아한 방법 * http://stackoverflow.com/questions/921180/c-round-up/926806#926806에서보세요. – Oliver

1

당신은 수정 플래그 제거 할 수 있습니다 :

pressed += (e.KeyCode & ~Keys.Modifiers & ~Keys.ShiftKey & ~Keys.ControlKey); 
+0

불행히도, 수정 자 키 자체를 반환하지 않는 것 같습니다. 그래도 고마워. – GeminiDomino

+0

변경하셨습니까? 이제 수정 자 전용 키 상황을 올바르게 처리하지만, 문자 키가 마침내 눌려지면 (Ctrl-X는 "CTRL + H", Ctrl-C는 "CTRL + 64 " – GeminiDomino

+0

아니요, 아무 것도 바꾸지 않았어요 ... –

관련 문제