当我的程序的自动生成代码启动时,它调用
Application.Run(new Form1());
字符串
并开始Form1
。我想切换到另一个窗体并同时关闭Form1
。问题是,如果我在Form1
中使用this.Close()
,然后我用Form.ShowDialog()
调用另一个表单,那么程序就结束了。如果我把它放在ShowDialog
之后,那么它会一直在后台,直到我关闭Form2
,这时程序结束。
如何在关闭当前打开的帧的同时生成Form2
的副本?
**编辑:**我也试过用.Show()
调用Form2
,但新框架立即关闭。
3条答案
按热度按时间pkwftd7m1#
下面的解决方案按您的预期工作。
要尝试此示例代码,请在Visual Studio中创建一个新的WinForms应用程序(即文件-->新建项目,选择Visual C# --> Windows Classic Desktop并使用模板“Windows Forms App(.NET Framework)”),然后添加第二个表单。
确保两个表单的名称分别为
Form1
和Form2
,然后按如下所示修改生成的解决方案中的代码:字符串
并且这是应用程序的入口点,修改如下:
型
诀窍是使用不带参数的Application.Run(),并在要退出应用程序的位置使用Application.Exit()。
现在,当您运行应用程序时,
Form1
将打开。单击X(右上角),Form 1关闭,但显示Form2
。再次单击X,表单将关闭(并退出应用程序)。除了将
Form2
的启动放置到FormClosed事件中,您还可以创建一个按钮Button 1来完成这项工作,但在这种情况下,不要忘记通过this.Close()
显式关闭按钮所属的表单:型
wecizke32#
您需要调用
this.Hide()
,使其不可见,但仍然打开,而不是this.Close()
关闭它(因为它是应用程序的主要形式,也关闭应用程序)。ukdjmx9f3#
在同一个google上找到了这个问题和一个codeproject。
作者基本上创建了一个顶级表单,用于管理要显示的表单之间的切换。