C# 如果按下c键,如何更改布尔值
如果按下一个键,我会尝试更改一个布尔值,但释放后会恢复为false,因此只有在所有参数都正确且按下一个键时,我才能触发if语句C# 如果按下c键,如何更改布尔值,c#,winforms,C#,Winforms,如果按下一个键,我会尝试更改一个布尔值,但释放后会恢复为false,因此只有在所有参数都正确且按下一个键时,我才能触发if语句 public class boolean { public static Boolean keyPresed = false; } private void mainForm_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.A) {
public class boolean
{
public static Boolean keyPresed = false;
}
private void mainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.A)
{
MessageBox.Show(" just for debugging ");
boolean.keyPresed = true;
}
else {
boolean.keyPressed = false;
}
if (tileBuyPlayer2.Checked && ownerShipsPlayer2.peacockOwner == false && boolean.keyPresed == true)
{
// do this sorry not on here cause how big it is
}
}
}
您可以在此类中将keyAPressed声明为全局变量,并在KeyDown事件中重置它:
public class DemoClass
{
public static Boolean keyAPressed = false;
private void mainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A)
{
MessageBox.Show(" just for debugging ");
keyAPressed = true;
}
else
{
keyAPressed = false;
}
if (keyAPressed == true)
{
// Reset keyAPressed to false
keyAPressed = false
if (tileBuyPlayer2.Checked && ownerShipsPlayer2.peacockOwner == false)
{
// do this sorry not on here cause how big it is
}
}
}
}
或使用KeyUp事件重置keyAPressed:
如果您愿意尝试Microsoft的反应式框架,那么您可以尝试执行以下操作:
var keyDown = Observable.FromEventPattern<KeyEventArgs>(mainForm, "KeyDown");
var query =
from kd in keyDown
where kd.EventArgs.KeyCode == Keys.A
where tileBuyPlayer2.Checked
where ownerShipsPlayer2.peacockOwner == false
select kd;
query.Subscribe(x =>
{
// do your code here
});
我可能错过了您试图做的事情,但我认为这会让事情变得更容易。您将keyPresed设置为true。看看这是不是真的。这永远是事实。为什么要这样做?keyPresed是否有可以设置为false的位置?使用KeyUp事件将标志设置为false。很抱歉,这只是代码的演示版本。我会更改它,我有一个else语句将其设置回false。首先,您应该尝试了解KeyDown事件的工作原理毕竟,mainForm\u KeyDown处理KeyDown事件。如果您理解了这一点,那么在释放密钥时,如何使用KeyUp事件将布尔变量重置回false,您会立即明白。您是在问我如何设置事件处理程序吗?看见我不明白为什么你甚至需要一个全局变量来保持按下键的状态。您可以使用KeyPressed事件,只需检查按下的键是否是所需的键,然后进行验证。Thx以获取您的评论。我将检查我的源代码。请删除第一个源代码块。它包含关于第二个if语句的错误。第二个代码块似乎几乎正确,它包含了KeyDown和KeyUp两个处理程序。但是,KeyDown处理程序不应该将布尔值设置回false。如果按住A键并点击SHIFT,会发生什么?对不起,但是第二个if语句中的错误是什么?如果keyAPressed是真的,我会做一些事情。但是在做事情之前,我先重置按键a。我这样做了,但是它没有显示消息框。它没有显示消息框。你按了a还是a?
var keyDown = Observable.FromEventPattern<KeyEventArgs>(mainForm, "KeyDown");
var query =
from kd in keyDown
where kd.EventArgs.KeyCode == Keys.A
where tileBuyPlayer2.Checked
where ownerShipsPlayer2.peacockOwner == false
select kd;
query.Subscribe(x =>
{
// do your code here
});