如何将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语句,而不是切换。

谁能告诉我出了什么问题?

如何将windows.forms.keys代码转换为整数

"e"拥有什么值,我如何将其转换为(Int),以便我可以在IF语句中使用它。

您不能将System.Windows.Forms.KeyInteger进行比较,因此在比较它们之前必须将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...
    }
  }