我有一个项目,其中我已将某些功能分配给单个字符(例如,键盘琴键“ 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语句而不是切换.
有人可以告诉我-这是什么问题? “ e”具有什么值,如何将其转换为(Int),以便可以在IF语句中使用它.
解决方法:
您无法将System.Windows.Forms.Key与和Integer进行比较,因此在比较它们之前必须将已转换的键转换为整数.这是给你的一个例子:
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 "";
}