我正在使用Visual Studio C#,並且陷入了使新窗體成爲主窗體的局面。我需要應用程序在關閉時關閉,並且我想關閉以前的表單而不關閉應用程序。如何設置窗體作爲應用程序的主窗體? C#
當前的嘗試(無效):
FormClass newForm = new FormClass();
newForm.Show()
previousForm.Close()
我正在使用Visual Studio C#,並且陷入了使新窗體成爲主窗體的局面。我需要應用程序在關閉時關閉,並且我想關閉以前的表單而不關閉應用程序。如何設置窗體作爲應用程序的主窗體? C#
當前的嘗試(無效):
FormClass newForm = new FormClass();
newForm.Show()
previousForm.Close()
首先理解爲什麼應用程序退出。從documentation of Application.Run(Form):
此方法添加的事件處理程序 用於封閉 事件中MainForm的參數。事件處理程序調用 ExitThread來清理 應用程序。
如果你可以逃脫只是隱藏它,而不是關閉它
FormClass newForm = new FormClass();
newForm.Show();
previousForm.Hide();
如果您需要將其關閉(或寧可)
阿爾特的Program.cs。爲了防止終止您可以通過運行(表格)的添加事件處理程序,使用運行(過載),不添加這樣的處理程序:
var form = new Form1();
form.Show();
Application.Run(); // The application will not exit when form is closed
但在這種情況下,您將需要調用的應用。在關閉newForm時(或在您想要退出的任何其他情況下),退出()自己。
如果您的意圖是使用類似splashscreen的東西,請嘗試在後臺線程上調用第一個表單,如果完成,它們將在任務完成後中止線程。 「第一」表格將被關閉。
或者,只需關閉「splashscreen窗體」,結束後臺線程。
它有幫助嗎?
這是一個可怕的想法。你幾乎不應該放棄線程,所有的用戶界面代碼都應該在一個線程上。 – Justin 2011-04-27 17:22:44
嗯,我不認爲這是一個可怕的想法。幾個splashscreen樣本使用這種技術。而且,通過這個問題,我真的不知道這是否會成爲druttka意圖的好辦法。我只是想法如何完成任務。 – marcoaoteixeira 2011-04-27 17:28:44
不錯 - 我從來沒有意識到Application.Run(Form)實際上註冊了一個事件處理程序。 – Justin 2011-04-27 17:32:13
這是我們不常看的那些東西之一,對吧? :) – 2011-04-27 17:34:17