2012-11-22 58 views
0

可能重複:
How do I prevent the app from terminating when I close the startup form?關閉第一形式

試想用2種形式,Form 1和Form的應用程序。當我點擊Form1中的一個按鈕時,我想打開Form2並關閉Form1,關閉不隱藏。 我是這樣做的方式是:

_Form2 = new Form2(); 
_Form2.Show(); 
this.Close();//or this.Dispose(); 

當我運行它關閉Form1並結束應用程序的代碼。林不知道,但也許是因爲在我的Program.cs我有Application.Run(new Form1());?或者這行只意味着當應用程序啓動時它應該加載Form1?

回答

4

有很多方法可以實現你想要的......這一切都取決於你需要的Form1Form2之間的微妙交互以及你想如何組織序列。

一種方法是使用Application.Run()替代....但是當您想要關閉應用程序時,您必須使用Application.Exit() ....因爲您需要發出信號指示消息循環和應用程序應該退出。

請注意,除了您在窗體上執行的任何「窗體關閉」調用(即.Close())之外,您認爲它不再顯示。

那麼這將讓你展現Form1開始......(因爲你使用無模式Show())......然後就可以關閉Form1以及創建和顯示中學Form2 .....然後做Application.Exit();

MSDN中更復雜的示例,即帶有上下文的Application.Run(ApplicationContext)是,如果您有一個用例,您希望具有多個表單,然後希望它們在關閉時退出。

1

是的,你是對的。 Run方法中提到的表單是「主窗體」,如果關閉它,您將關閉應用程序。如果你想關閉Form1,你可以做到以下幾點:

Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Form1 form = new Form1(); 
      form.Show(); 
      Application.Run(); 

和代碼以關閉Form1並打開窗體2上的按鈕點擊:

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

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

要從應用退出只是把一個更按鈕(或提供事件處理程序),然後運行該代碼:

Application.Exit(); 
1

如果你只需要形成一個序列,你可以在主線程採取序列的照顧。

所以在主,你必須:

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 
    Application.Run(new Form2()); 
} 

和所有你需要做的就是關閉Form1爲它繼續下一個:

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