2013-04-14 36 views
0

我想使用e.KeyData,但它返回“NumPad2”或“D2”我想只返回“2”,可以使用e.keycode或任何..因为它的工作,我已经尝试转换为int和没有用。如何检索最后一个键的检索次数?

+0

您正在使用错误的事件。虚拟键到实际键入字符的映射高度依赖于活动键盘布局。改为使用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

经过一番研究,看来,你要么必须做类似于RIKKI乙建议的东西,或者你可以创建自定义文本框和覆盖onKeyDown和的OnKeyPress象下面这样:

首先创建自定义事件的args:

public class CustomKeyEventArgs : KeyEventArgs 
{ 
    public char LastCharPressed { get; set; } 

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

然后将其设置自定义文本框:

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语句,上面应该可以工作 –