我有一个包含所有字母及其DirectInput密钥代码的2D数组:
string[,] DXKeyCodes = new string[,]
{
{"a","0x1E"},
{"b","0x30"},
...
};
然后我有一个函数,如果我发送' a'它返回' 0x1E'。
然后,通过一个需要将密钥代码指定为short的函数将此密钥代码作为按键发送到外部程序,但是我的数组包含字符串。
如何将此类字符串转换为简短字符串?
例如,这是有效的,但当然总是发送相同的密钥代码:
Send_Key(0x24, 0x0008);
我需要这样的东西才能工作,所以我可以发送任何给定的密钥代码:
Send_Key(keycode, 0x0008);
我尝试过以下内容,但它也无效,只是崩溃了我的应用程序。
Send_Key(Convert.ToInt16(keycode), 0x0008);
我真的不想去像
这样的东西if (keycode == "a")
{
Send_Key(0x1E, 0x0008);
}
else if (keycode == "b")
{
Send_Key(0x30, 0x0008);
}
...
我确信有更好的方法,但我无法找到它:(
感谢您的帮助。
答案 0 :(得分:1)
如问题评论中的theme86和Jasen所述,您应该使用a Dictionary<string, short>
instead of a 2D array。这样,您可以通过键来查找值(而不是在想要查找相应值时迭代遍历数组搜索键),并且您不必从字符串进行任何转换。如,
Dictionary<string, short> DXKeyCodes = new Dictionary<string,short>
{
{"a", 0x1E},
{"b", 0x30}
};
short theValue = DXKeyCodes["a"]; // don't need to loop over DXKeyCodes
// don't need to convert from string
如果出于某种原因你必须将这些值存储为字符串,那么使用静态方法Convert.ToInt16(string, int)
:
short convertedValue = Convert.ToInt16("0x30", 16);
(在C#中,short
是System.Int16
的别名,并且总是有16位。)
答案 1 :(得分:1)
根据DirectInput文档,API有一个Key
enumeration。
因此,您可以像这样填充dictionary:
var DXKeyCodes = new Dictionary<string,short>
{
{ "a", (short)Microsoft.DirectX.DirectInput.Key.A }, // enum value of A is 30 which == 0x1E
{ "b", (short)Microsoft.DirectX.DirectInput.Key.B }
};
用法:
Send_Key(DXKeyCodes[keycode], 0x0008);