0

我正在尝试使用 e.KeyData,但它返回“NumPad2”或“D2”我希望只返回“2”,可以使用 e.keycode 或其他任何东西。因为它有效,我已经尝试转换为 int,但没有任何效果.

4

2 回答 2

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);
    }
}
于 2013-04-14T02:38:10.177 回答
0

经过一些研究,您似乎要么必须执行类似于 Rikki B 建议的操作,要么您可以创建一个自定义文本框并覆盖 OnKeyDown 和 OnKeyPress,如下所示:

首先创建自定义事件参数:

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);
    }
于 2013-04-14T02:42:11.603 回答