如果我关闭其中一个表单,它们都会关闭

时间:2011-10-01 06:05:53

标签: c# winforms

我是新手赢得表格(C#)。我正在制作的当前表单可以选择创建自己的新(空白)实例,但是如果我关闭了第一个实例,那么其他所有实例也会关闭。这不是我想要发生的事情。 (关闭从第一个开放的任何形式都不会关闭任何其他形式)

我在想这可能是因为我正在从其中一个副本/对象中创建一个新副本,因此它与第一个对象绑定,因此它在关闭时会关闭;但是,如果我打开另一个从第一个打开的形式然后关闭从第一个打开的那个,那个我从它打开的那个没有关闭。

我想要它,以便我可以在没有其他关闭的情况下关闭第一个表单,并且当最后一个关闭时,程序停止运行。

有没有办法做到这一点?

5 个答案:

答案 0 :(得分:3)

您可以根据需要运行任意数量的表单,但每个表单都在单独的线程中运行

using System;
using System.Threading;
using System.Windows.Forms;

public partial class MyForm: Form
{
    public MyForm()
    {
        InitializeComponent();
    }

    private void Button1Click(object sender, EventArgs e)
    {
        var t = new Thread(() => Application.Run(new MyForm()));
        t.Start();
    }
}

答案 1 :(得分:2)

您不必关闭入口点(MainForm)表单。检查Program.cs代码文件中的Main()方法代码。

public static void Main(string[] args) 
{
    // Starts the application.
    Application.Run(new Form1());
}

阅读this页。

  

要阻止表单关闭,请处理Closing事件并设置   取消传递给事件处理程序的CancelEventArgs的属性   真。

答案 2 :(得分:2)

听哥们你不需要为每个表单创建新的线程..只需使用它:

    Form newForm1 = new Form();
    this.Hide();
    newForm1.showDialog();
    this.Close();

多数民众赞成!!!! ..

答案 3 :(得分:0)

不久:

每个Windows应用程序的第一种形式是主要形式。

如果它关闭,应用程序也会关闭。

(有关详细信息,请参阅Program.cs)

要解决此问题,您可以调用Application.Run(虽然我不知道它是否聪明)

答案 4 :(得分:0)

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        //Application.Run(new Form1());

        new Form1().Show(); // any entry point with form
        Application.Run(); // without main form
    }
}

<强> Program.cs的

你可以使用这个代码块。 但是当任何表格关闭时,申请未完成。 (即使最后一个表格在申请中。) 因为应用程序不包括mainform。

如果申请表没有打开的表格。 申请将暂停。然后你可以看到任务管理器。 因此,您将在每个表单关闭事件中手动调用Application.Exit()方法。