为什么有些密钥一旦转换为字符串,就不能转换回原来的密钥代码?

时间:2016-03-24 17:45:18

标签: c#

我正在尝试使用按键,将其转换为字符串,然后将字符串转换回其原始的keypress int值。

假设我有这个:

KeysConverter kc = new KeysConverter();

string keyChar = kc.ConvertToString((System.Windows.Forms.Keys)e.KeyCode);
int key = (int)e.KeyCode;

Debug.WriteLine( e.KeyCode + " " + (int)e.KeyCode);

Key tempkey;
Enum.TryParse(keyChar, out tempkey );

Debug.WriteLine( tempkey + " " + (int)tempkey );

一切似乎都很好。例如:

测试用例:F5

输出: F5 116 F5 116

测试用例:`(Oemtilde)

输出:Oemtilde 192 Oemtilde 192

测试用例:X

输出: X 88 X 88

似乎没事......

然后我这样做:

测试用例:1

输出:D1 49 Lbutton 1

为什么某些键无法转换回原始值?

它无法使用的可注意键:

1,2,3,...,9,0,插入,删除,向下翻页,Page Up

编辑:

测试用例:1(在键盘右侧的键盘上)

输出:NumPad1 97 NumPad1 97

1 个答案:

答案 0 :(得分:1)

您的代码存在根本错误。 KeysConverter将密钥转换为字符串,因此Keys.D1(顶行上1键的代码)转换为字符串“1”,因为密钥代表的是。 Enum.TryParse尝试理解这一点,但没有Keys.1标记(显然),所以它只是将字符串转换为数值“1”。 (Keys) 1确实是Keys.LButton

我不确定您通过此往返转换尝试实现的目标,因此我不知道如何更正您的代码,但这解释了您所看到的内容。