作为修饰符在 C# 中不起作用(例如键代码 == x 作为键)

  • 本文关键字:代码 不起作用 c# keyboard
  • 更新时间 :
  • 英文 :


我在 C# 中使用此代码块时遇到错误

    private void frm2_KeyDown(object sender, KeyEventArgs e)
    {
        string x = "w";
        if (e.KeyCode == x as Keys)
        {
            //do whatever
        }
    }

我收到此错误

as 运算符必须与引用类型或可为空的类型一起使用("System.Windows.Forms.Keys"是不可为空的值类型)

我需要做一些类似于该用户在此处发布的内容。我不知道为什么这不起作用,并希望得到任何帮助。我对编程比较陌生,所以请放轻松。我愿意提供解决问题所需的任何其他代码部分。

您需要

使用Enum.Parse方法将字符串转换为Keys但我建议您使用Keys.W

if (e.KeyCode == Keys.W)
{
        //do whatever
}

您的尝试不起作用,因为x是字符串类型,而字符串类型永远不能是 Keys 类型。您不能将字符串强制转换为枚举Keys,只能convert它。请记住,投射和转换是两回事。

如果您需要转换,请按照以下步骤操作

string str = ...;//Get string somehow
Keys myKey = (Keys)Enum.Parse(typeof (Keys), str);


您可以使用密钥来实现相同的密钥枚举,如下所示。
Keys neededLetter = Keys.W;
if (e.KeyCode == neededLetter)
{
    if ( neededLetter == Keys.N)
    {
        neededLetter =  Keys.O;
    } else if ( neededLetter == Keys.O ) {
        neededLetter = Keys.T;
    } else if ( neededLetter ==  Keys.T ) {
        neededLetter =  Keys.E;
    } else if ( neededLetter == Keys.E ) {
        // you now have the full sequence typed, show your app
    }
}

你要做的是字符串到枚举的转换

if (e.Modifiers == (Keys)Enum.Parse(typeof(Keys), "keys1", true) && e.KeyCode == (Keys)Enum.Parse(typeof(Keys), "keys2", true))
        {
            string keyPressed = e.KeyCode.ToString();
            MessageBox.Show(keyPressed);
        }

例:

    private int count = 0;
    private string keysPressed = "NOTE";
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (count < keysPressed.Length)
        {
            if (e.Modifiers == (Keys)Enum.Parse(typeof(Keys), "None", true) &&
                e.KeyCode == (Keys)Enum.Parse(typeof(Keys), keysPressed[count].ToString(), true))
            {
                if (count == keysPressed.Length - 1)
                {
                    MessageBox.Show(keysPressed);
                    //restart
                    count = 0;
                }
                else
                    count++;
            }
            else
                count = 0;
        }
        else
            count = 0;
    }

相关内容

最新更新