2013-04-14 2 views
0

e.KeyData를 사용하려고하지만 "NumPad2"또는 "D2"를 반환합니다. "2"만 반환하고 e.keycode 또는 기타를 사용할 수 있습니다. 작동하기 때문에 이미 int로 변환하려고했습니다. 아무것도 작동하지 않습니다.마지막으로 누른 키 수를 검색하는 방법은 무엇입니까?

+0

:

public class CustomKeyEventArgs : KeyEventArgs { public char LastCharPressed { get; set; } public CustomKeyEventArgs(Keys keyData, char lastCharPressed) : base(keyData) { LastCharPressed = lastCharPressed; } } 

그런 다음 사용자 정의 텍스트 상자에 그것을 설정 잘못된 이벤트를 사용 중입니다. 가상 키를 실제 타이핑 문자에 매핑하는 것은 활성 키보드 레이아웃에 따라 크게 달라집니다. 대신 KeyPress 이벤트를 사용하십시오. –

답변

2

시작해야합니다.

먼저 정의를 만듭니다

private void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    string pressedKey = e.KeyData.ToString(); 

    if (pressedKey.StartsWith("D")) 
    { 
     pressedKey = pressedKey.Replace("D", ""); 
     MessageBox.Show(pressedKey); 
    } 

    if (pressedKey.StartsWith("NumPad")) 
    { 
     pressedKey = pressedKey.Replace("NumPad", ""); 
     MessageBox.Show(pressedKey); 
    } 
} 
+0

완벽하게, 고마워, 난 이해가 안 돼 왜 C#이 없기 때문에 변환기를이 적응하지 않고 .. –

+0

괜찮습니다. 더 쉬운 방법이있을 수 있지만 이것은 최소한 당신이 시작하도록해야합니다. 답변을 수락하고 투표를하는 것을 잊지 마십시오. –

+0

완료, 투표 및 답변 수락, 기다려 주셔서 죄송합니다, 나는 새로운 사용자입니다. –

0

은 몇 가지 조사 후, 당신은 리키 B 제안 것과 비슷한 뭔가를해야하거나, 사용자 정의 텍스트 상자를 만들고 onKeyDown에와 때 onKeyPress 아래와 같이 값을 덮어 쓸 수 있다는 표시 이벤트 인수 :

public delegate void CustomKeyUpHandler(object sender, CustomKeyEventArgs e); 
    public event CustomKeyUpHandler OnCustomKeyUp; 

    private char lastChar; 
    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
     lastChar = e.KeyChar; 
     base.OnKeyPress(e); 
    } 

    protected override void OnKeyUp(KeyEventArgs e) 
    { 
     if(OnCustomKeyUp != null) 
      OnCustomKeyUp(this, new CustomKeyEventArgs(e.KeyData, lastChar)); 
     base.OnKeyUp(e); 
    } 
+0

마지막 답변이 어떻게 작동합니까? 가능하다면 ifs를 사용하지 않고 직접 변환 할 수 있습니까? 감사합니다 –

+0

내가 예상 한대로하지 않았기 때문에 내 대답이 바뀌 었습니다. 큰 if 문을 피하려는 경우 위의 코드가 작동해야합니다. –

관련 문제