我在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的内容。我不知道为什么这不起作用,并希望得到任何帮助。我对编程比较陌生,所以请放轻松。我愿意提供解决问题所需的任何其他代码部分。
答案 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;
}