2012-02-26 23 views
3

我由C#Windows窗體應用程序要求用戶使用稱爲Form1形式登錄,如下所示:用戶登錄打開沒有所有者的新表單?

// This code is called from Form1 

Form2 f = new Form2(); 
f.Show(); 

// Then Form1 does some finalization logic and closes itself 

後,登錄表單應該關閉和主應用程序窗口Form2應打開。但我遇到的問題是,如果我從Form1調用Form2,Form1將成爲Form2的所有者,因此關閉Form1會關閉這兩個表單並結束該應用程序。

我該如何調用Form2使其獨立於Form1?

+0

「form1」如何顯示?它是通過'Application.Run'嗎? – 2012-02-26 04:49:41

+0

即時通訊使用f.Show()如上所示,這是在視覺工作室的確切代碼 – Oztaco 2012-02-26 04:53:15

+0

我的意思是'form1',而不是'form2'。如何顯示'form1'? – 2012-02-26 04:54:01

回答

3

問題不是所有者,而是Windows消息循環與Form1綁定。當Form1關閉時,應用程序也會關閉。看在你Main方法:

Application.Run(new Form1()); 

最簡單的解決方法是,以顯示你的登錄表單(假設它是一個登錄表單)作爲一個模式對話框,然後開始在Form2的窗口消息循環:

static void Main() 
{ 
    var form1 = new Form1(); 
    form1.ShowDialog(); 
    if (form1.LoginSuccessful) 
    { 
     Application.Run(new Form2()); 
    } 
} 

編輯: 只是做了一些谷歌搜索,看起來像另一種選擇是自定義ApplicationContext s。我從未與這些人一起工作:

http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext.aspx

+0

我打算寫一個基於'ApplicationContext'的示例,但現在不能打擾... – 2012-02-26 05:05:48