我正在制作一个带有表格的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;
}
}
}
答案 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;
}
}
}