如何显示和隐藏具有相同键的表单?

时间:2015-12-15 01:48:41

标签: c# forms

我正在制作一个带有表格的RPG游戏,我无法弄清楚如何只用一个键来显示和隐藏一个特定的表单。例如,当我按下" C" key我希望它用PlayerInfo面板向我展示表单,当我按下" C"我希望它能隐藏它。

private void KeyPress(object sender, KeyEventArgs e)
    {
        PlayerInfo playerInfo = new PlayerInfo(this);
        bool visible = false;

        if (e.KeyCode == Keys.C)
        {
            if (visible == false)
            {
                playerInfo.Show();
                visible = true;
            } 
        }

        if (e.KeyCode == Keys.C)
        {
            if (visible)
            {
                playerInfo.Hide();
                visible = false;
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

你需要一个if / else语句,现在两个都被调用,所以当你按下键时你最终显示然后将它隐藏在同一个调用中

bool visible = false;

private void KeyPress(object sender, KeyEventArgs e)
{
    PlayerInfo playerInfo = new PlayerInfo(this);


    if (e.KeyCode == Keys.C)
    {
        if (visible == false)
        {
            playerInfo.Show();
            visible = true;
        } 
        else if (visible)
        {
            playerInfo.Hide();
            visible = false;
        }
    }
}
编辑:对不起,我没注意到你的可见变量是一个局部变量。您需要将其设为类变量,并在构造对象时设置它。如果您在回调中初始化它,您将始终将其设置为false。

答案 1 :(得分:1)

我会在PlayerInfo类中添加一个名为toggle

的方法和属性
 public class PlayerInfo { 
       // your stuff
       public bool IsVisible {get;set;}
       public void Toggle() {
             if (IsVisible)
                   Hide()
             else
                   Show()
             IsVisible = !IsVisible
       }
 }

答案 2 :(得分:0)

  

使用您的代码,在您制作之前,您始终可以获得它的可见性   visible作为全局变量。可能playerInfo也是全局的,否则每次都会成为一个新实例。

全球宣言:

bool visible = false;
PlayerInfo playerInfo = new PlayerInfo(this);

KeyPress方法签名:

private void KeyPress(object sender, KeyEventArgs e)
{
 if (e.KeyCode == Keys.C)
    {
        if (!visible)
        {
            playerInfo.Show();
            visible = true;
        } 
        else
        {
            playerInfo.Hide();
            visible = false;
        }
    }
}