2015-12-15 12 views
0

我正在制作一个RPG游戏的形式,我不知道如何显示和隐藏一个特定的窗体只有一个键。例如,当我按下“C”键时,我希望它向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; 
      } 
     } 
    } 

回答

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。

+0

很好的答案 - 但如果'(可视)'是多余的(它可以只是一个'else')。 –

+0

这不起作用,你总是设置可见为false。 –

+0

是的,这是行不通的。 –

1

我想补充的方法,并在PlayerInfo类的属性,称为toggle

public class PlayerInfo { 
     // your stuff 
     public bool IsVisible {get;set;} 
     public void Toggle() { 
      if (IsVisible) 
        Hide() 
      else 
        Show() 
      IsVisible = !IsVisible 
     } 
} 
+0

如果你也显示使用情况,这可能会好得多 –

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; 
     } 
    } 
} 
+0

我将布尔移动到方法外部,但它仍然不起作用。现在它需要按键来显示表格,但它根本没有隐藏它。 –

+0

单独移动布尔变量不会产生好的结果。因为'playerInfo'会在每次按键时实例化。所以你需要把它扩展到全球。请参阅我的回答中的更新 –

+0

当我将playerInfo移到方法外时,它会给我ObjectDisposed异常。 –

相关问题