好的,我已经看到了一些类似的问题,但我不确定如何解决这个问题。基本上我正在使用C#创建游戏,第一种形式询问用户是否想要开始新游戏或恢复之前的游戏。当用户点击"新游戏"例如,我想关闭这个表单并开始一个新的表单,这个表单将是实际的游戏。当然,这些是不同的平台和语言,我可以通过杀死第一个Activity并转到另一个Activity轻松地在Android中执行此操作。在C#中如果我试图杀死第一个表单,整个程序终止,因为进程已经结束!
我认为必须有一个更好的解决方案来解决这个问题,而不是保持第一个表格处于活动状态并将其隐藏起来?至少隐藏它对我来说似乎很浪费。任何想法都将受到高度赞赏!感谢您提前的时间!
答案 0 :(得分:1)
有两种方式
1)您可以隐藏表格
Form f1=new Form();
f1.Hide();
2)将其显示为False
Form f1=new Form();
f1.Visible=False;
答案 1 :(得分:1)
这种方法怎么样?让你的“游戏”成为立即提出的主要游戏。然后在该表单的加载事件中,您隐藏表单并调出表单,询问您是否需要新游戏或旧游戏。
在他们回答问题后,您关闭辅助表单并使用布尔答案来决定要加载到表单中的信息。然后显示游戏形式。
private void GameForm_Load(object sender, EventArgs e)
{
this.Hide();
using (frmAsk frm = new frmAsk())
{
frm.ShowDialog();
LoadGameInfo(frm.LoadNewGame);
}
this.Show();
}
答案 2 :(得分:0)
这是另一种方法。在您的Program类中,创建一个不断重新创建主窗体的公共静态属性。
static class Program
{
public static bool KeepRepeating = false;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
do
{
Application.Run(new Form1());
} while (KeepRepeating);
}
}
然后,如果您希望在关闭后重新创建表单,只需将该属性设置为true并关闭主表单:
Program.KeepRepeating = true;
this.Close();
为了保持谨慎,您可以在实例化表单后立即将重复属性设置为false,这样如果表单由于异常而异常终止,您将无法陷入无限循环:
public Form1()
{
Program.KeepRepeating = false;
InitializeComponent();
}
答案 3 :(得分:0)
为什么不直接“杀死”一个容器(即面板),将容器中的菜单放在第一个表单中,并在游戏中设置另一个容器?
答案 4 :(得分:0)
是的,隐藏它可以被认为是浪费的&#39;。但这是移动设备和桌面设备之间的主要区别之一:您很少需要在桌面上以这种方式担心资源。你真的有三个选择:
Hide()
或Visible=false
)答案 5 :(得分:0)
当关闭最后一个表单而不是主表单时,将关闭模式更改为关闭。
https://msdn.microsoft.com/en-us/library/0hzfysdc%28v=vs.90%29.aspx
此外,我建议你是否只是学习.NET / WinForms来学习WPF,特别是对于游戏。 WPF允许您将关闭模式设置为“显式”,即当您这样说时。
编辑:我只是重新阅读该链接,它说它只适用于VB项目。
您在后台运行主窗体的方法没有任何问题。