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

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

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

我想要它,这样我仍然可以关闭第一个forms而不关闭其他forms,并且当最后一个关闭时,程序停止运行。

有没有办法做到这一点?

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

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(); } } 

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

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

阅读此页面。

若要防止窗体关闭,请处理Closing事件并将传递给事件处理程序的CancelEventArgs的Cancel属性设置为true。

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

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

而已 !!!! ..

不久:

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

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

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

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

 static class Program { ///  /// The main entry point for the application. ///  [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()方法。