繁体   English   中英

如果按下键,如何更改布尔值c#

[英]how to change a boolean value if a key is pressed down c#

我试图在按下某个键时更改一个布尔值,但是当释放时返回到false,因此,如果所有参数都正确并且按下某个键,则只能触发if语句。

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

您可以global var in this class 中将keyAPressed声明为global var in this class 变量 ,并在KeyDown事件中将其reset

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事件reset keyAPressed

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 (tileBuyPlayer2.Checked && ownerShipsPlayer2.peacockOwner == false && keyAPressed == true)
        {
            // do this sorry not on here cause how big it is
        }
    }
    private void mainForm_KeyUp(object sender, KeyEventArgs e)
    {
        keyAPressed = false;
    }
}

如果您乐于尝试使用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
});

我可能错过了您想要做的事情,但是我认为这使事情变得容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM