所以我在Windows窗体应用程序中有两个场景,他们应该切换。但是,它无法正常工作。这是Form1的代码:
using System;
using System.Windows.Forms;
namespace Chat_Room {
public partial class SceneOne : Form {
public SceneOne() {
InitializeComponent();
}
private void createRoomButton_Click(object sender, EventArgs e) {
Form2 scene = new Form2();
scene.Show();
this.Close();
}
}
}
我知道,这是一个小问题,但我已经拥有了这两种形式的所有代码,然后我决定将它分成两部分,但是一旦我移动了代码,它就停止了切换(现在它只关闭第一个)。是的,第二种形式是Form2。
答案 0 :(得分:0)
当表单关闭时,对象中创建的所有资源都将关闭,表单将被处理
因此,当您致电this.Close()
时,scene
也会处理,因为“在对象中创建”。
根据this discussion,也许你应该尝试这样的事情:
this.Hide();
Form2 f = new Form2();
f.Show();
答案 1 :(得分:0)
你不应该使用this.Close()
因为那将处理表格
查看Form.Designer.cs
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
而不是使用this.Close()
请尝试隐藏表单this.Hide
答案 2 :(得分:0)
关键是你如何开始Application
。
只需修改您的Main方法:
namespace Chat_Room
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Need this, because if you do it in your Run method, appication will closes immediatly after you close the form.
(new SceneOne()).Show();
Application.Run();
}
}
}
在最后一个场景的结束事件中,请调用Application.Ext()
方法。
了解更多信息,MSDN参考:
public static void Run(
Form mainForm
)
此方法将事件处理程序添加到Closed事件的mainForm参数。事件处理程序调用ExitThread来清理应用程序。
同样来自MSDN如果你正在使用
public static void Run()
在Windows窗体中,当调用Exit方法时,或者在运行主消息循环的线程上调用ExitThread方法时,将关闭此循环。
因此,如果您选择Application.Run()
(所以没有参数),则必须调用Application.Exit
方法来关闭应用程序。
所以需要