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