【发布时间】:2011-08-08 18:42:47
【问题描述】:
我覆盖了ProcessCmdKey,当我得到Keys 参数时,我想检查这个Keys 是字母、数字还是特殊符号。
我有这个sn-p
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
char key = (char)keyData;
if(char.IsLetterOrDigit(key)
{
Console.WriteLine(key);
}
return base.ProcessCmdKey(ref msg, keyData);
}
一切都适用于字母和数字。但是当我按 F1-F12 时,它会将它们转换为字母。
也许有人知道解决此任务的更好方法?
【问题讨论】:
-
问题是你将
keyData转换为一个角色。你不能那样做。您必须使用Keys枚举中定义的常量来获取此信息。 -
查看
Keys枚举的值,确实最初认为“这些枚举值是字符代码”。但是进一步考虑这是不可能的,因为a)有些键没有字符,例如Sleep和 b) 也有共享相同字符的键,例如D0和NumPad0:即使它们具有相同的字符0,它们也不能共享相同的枚举值,因为那样它们将无法区分,因此它们中至少有一个映射到某个任意值。 (我知道这很旧,我只是想澄清 为什么 投射不起作用。)