繁体   English   中英

C#中的Forms之间切换

[英]Switching between Forms in C#

当我的程序的自动生成代码启动时,它调用

Application.Run(new Form1());

并启动 Form1。 我有另一个表单,我想同时切换到并关闭 Form1。 问题是,如果我在使用“Form.ShowDialog()”调用另一个表单之前在 Form1 中使用“this.Close()”,那么程序就会结束。 如果我把它放在 ShowDialog 之后,它就会一直在后台运行,直到我关闭 Form2,此时程序结束。

如何在关闭当前打开的框架的同时生成 Frame2 的副本?

编辑:我也尝试过用.Show() 调用 Frame2,但新框架会立即关闭。

以下解决方案按您的预期工作。

To try this sample code, create a new WinForms application in Visual Studio (ie File --> New Project, select Visual C# --> Windows Classic Desktop and use the template "Windows Forms App (.NET Framework)"), then add第二种形式。

确保两个 forms 命名为Form1Form2 ,然后将生成的解决方案中的代码修改如下:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.FormClosed += 
           new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        (new Form2()).Show();
    }
}

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
        this.FormClosed += 
           new System.Windows.Forms.FormClosedEventHandler(this.Form2_FormClosed);
    }

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        Application.Exit();
    }
}

而这是应用程序的入口点,修改如下:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        //Show first form and start the message loop
        (new Form1()).Show();
        Application.Run(); // needed, otherwise app closes immediately
    }

}

诀窍是在要退出应用程序的位置使用不带参数的 Application.Run() 和 Application.Exit()。

现在,当您运行应用程序时, Form1将打开。 单击X (右上角),Form1 关闭,但Form2出现。 再次单击X并关闭表单。

除了将Form2的启动放入 FormClosed 事件中,您还可以创建一个按钮来完成这项工作,但在这种情况下,不要忘记通过this.Close()明确关闭按钮所属的表单:

    private void button1_Click(object sender, EventArgs e)
    {
        (new Form2()).Show(); this.Close();
    }

您需要调用this.Hide()使其不可见但仍处于打开状态,而不是this.Close()将其关闭(并且将其视为应用程序的主要形式,也将关闭应用程序)。

在同一个谷歌上找到了这个问题和一个代码项目

作者基本上创建了一个顶级表单来管理他想要展示的 forms 之间的切换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM