如何将windows.forms.keys代码转换为整数
本文关键字:代码 转换 整数 keys forms windows | 更新日期: 2023-09-27 18:12:30
我有一个项目,我已经分配了一些功能到单个字符(例如:键盘键"H"将做高通滤波)。
现在得到"H"作为输出,我已经创建了一个down事件,希望捡起键是下降,并调用函数与整数值。然而,当我试图将输入值与函数中的整数值进行比较时,我会得到一个错误。以下是我的代码…
public static event DownEventHandler Down;
public static delegate void DownEventHandler(string Key);
Down(FunctionChar((Keys)lParam.Code)); // lParam.code is an integer value.
private string FunctionChar(Keys e)
{
if(e >=65 && e<=90){
if (Control.IsKeyLocked(Keys.CapsLock) || ((Control.ModifierKeys !=0) && (Keys.Shift) != 0))
{
return e.ToString;
}
else
{
return e.ToString.ToLower;
}
}
我假设这个函数将给我输出一个字符串"G"或"G"。如前所述,我想在进一步的功能中使用它。
然而,它给我的错误如下:
Operator '>=' cannot be applied to operands of type 'System.Windows.Forms.Keys' and 'int'
我知道其中一个解决方案是使用SWITCH语句,但我想使用if语句,而不是切换。
谁能告诉我出了什么问题?您不能将System.Windows.Forms.Key
与Integer
进行比较,因此在比较它们之前必须将key
转换为整数。下面是一个例子:
Keys e = Keys.A;
int keyVal= (int)e;// return 65
你可以这样做:
if((int)e >=65 && (int)e<=90)
{
// your code goes here
}
另一种方法是:
if(e >= Keys.A&& e<= Keys.Z)
{
// your code goes here
}
更新:您可以使用以下命令返回相应的字符:return ((char)e).ToString();
因此整个函数签名如下:
private string FunctionChar(Keys e)
{
if ((int)e >= 65 && (int)e <= 90)
{
if (Control.IsKeyLocked(Keys.CapsLock) || ((Control.ModifierKeys != 0) && (Keys.Shift) != 0))
{
return ((char)e).ToString();
}
else
{
return ((char)e).ToString().ToLower();
}
}
return "";
}
当使用枚举(如Keys
)时,更好的设计是根据枚举的值来表示任何条件,而不是将其强制转换回int
s。
所以我建议替换:if(e >=65 && e<=90)
与if (e >= Keys.A && e <= Keys.Z)
.
这应该可以很好地编译-并且您的意图对任何阅读您的代码的人都更清楚!
我宁愿不使用魔术数字,而是使用实际的字符,并且我会为此编写一个扩展方法:
public static class KeysExtensions
{
public static Boolean IsLetter(this Keys value)
{
return value >= Keys.A && value <= Keys.Z;
}
}
所以当处理事件时,你可以把可读的代码:
private void Something_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.IsLetter())
{
// Do your operations here...
}
}