场景切换不正常

时间:2018-04-19 12:22:06

标签: c# winforms scene

所以我在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。

3 个答案:

答案 0 :(得分:0)

来自msdn - Form.Close

  

当表单关闭时,对象中创建的所有资源都将关闭,表单将被处理

因此,当您致电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方法来关闭应用程序。

所以需要