0

我有一个方法,当 KeyUp 事件在我的控件上触发时调用,在该方法中,我使用 char.IsLetterOrDigit 方法检查按下的键是字母或数字。但是它似乎不适用于键盘数字!?

我的代码如下:

    void MyControls_KeyUp(object sender, KeyEventArgs e)
    {
        if ((char.IsLetterOrDigit(Convert.ToChar(e.KeyValue))))
        {
            ....
        }
    }

有人知道为什么这不起作用吗?

提前致谢。

我正在使用 C#4.0

4

3 回答 3

4

你没有做你认为你正在做的事情。

Convert.ToChar()不会采用键盘代码并将其转换为该键所代表的字符;这样做涉及太多,不同的键盘布局、文化、键修饰符状态等等。您在这里所做的是获取KeyCode 枚举的数值并将其转换为char.

如果要检索与按键关联的字符,则需要覆盖KeyPress事件而不是KeyUp事件。Windows 窗体将执行所有必要的翻译和转换,以确定哪个字符对应于键。

于 2012-08-21T14:21:54.580 回答
1

KeyUp 可让您处理键盘上的所有按钮(包括功能键和数字键盘等特殊键)。但是,KeyValue 或 KeyCode 并不总是指按下按钮的字符。

KeyPress 将为您提供按下按钮的字符,但不会处理特殊键(包括关闭 numlock 时的数字键盘)。

如果你想处理键盘上的所有键,我会使用 KeyUp。e.KeyValue 返回 Keys 枚举中的值(所以数字键盘 0 是 Keys.NumPad0),如果您只想处理输入的值,请使用 KeyPress。

于 2012-08-21T14:25:57.110 回答
1

试试这个 :

if (e.KeyCode == Keys.NumPad0)
        {
            // your code
        }
        // else for other numpad keys
于 2012-08-21T14:26:51.913 回答