作为修饰符不在C#中工作(e.KeyCode == x as Keys)

时间:2014-03-06 04:28:17

标签: 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'是不可为空的值类型)

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

2 个答案:

答案 0 :(得分:2)

您需要使用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
    }
}

答案 1 :(得分:0)

您需要做的是String to Enum转换

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;
    }