2011-12-10 94 views
4

我對C#有點新鮮,我正在通過嘗試使用各種函數製作程序來教自己如何使用C#來自學。如果我不知道什麼,我通常會看互聯網,但這一直讓我發瘋。打開一個新窗體,關閉舊窗體C#

我記得最初我開始打開一個表單並關閉舊錶單,但是當我關閉新表單時,舊錶單會再次出現,以及其他奇怪的問題。這個.Hide()似乎也沒有做任何事情。

當前打開一個新窗體我使用這個代碼,但它感覺像應該有一行代碼的東西就像打開窗體一樣簡單... 我的問題是如果有。

private void OpenMainForm() 
    { 
     MainForm frm2 = new MainForm(); 
     frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed); 
     frm2.Show(); 

     // Since this.Hide() for some reason doesn't work, i'll have to do this crap 
     this.WindowState = FormWindowState.Minimized; 
     this.ShowInTaskbar = false; 
    } 

    private void frm2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     this.Close(); 
    } 

回答

13

如果你想,當你在二級一個是隱藏你的主窗口中,你應該使用ShowDialog()方法。有了這個,你甚至不需要form_closed event

您的代碼應該是這樣的:

private void OpenMainForm() 
{ 
    MainForm frm2 = new MainForm(); 
    this.Hide();   //Hide the main form before showing the secondary 
    frm2.ShowDialog();  //Show secondary form, code execution stop until frm2 is closed 
    this.Show();   //When frm2 is closed, continue with the code (show main form) 
} 
0

您可以隱藏舊窗體,如下所示。

private void frm2_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Hide(); 
} 
+0

難道這仍然是做同樣的事情,當你關閉新的窗體,它只是彈出舊窗體不是嗎? – user1071461

+0

如果你隱藏新的表單,然後再用'new'關鍵字再次打開它,那麼它會出現新的和'垃圾收集器'將處置未被引用的形式,希望你有我,謝謝你的時間。 –

+0

..這太奇怪了。之前的問題是,this.Hide()只是沒有做狗屎,現在我使用this.Hide()完全相同的代碼,並且它確實有效,所以我不必使用那個怪異的代碼了哦,謝謝。 – user1071461

2

這完全適用於我

Form2 frm = new Form2(); 
frm.Show(); 
frm.Activate(); 
this.Hide(); 

,但如果你想關閉從窗體2整個應用程序...你必須在FormClosing添加Application.Exit(); Form2的事件

4

您還可以使用此代碼:

public static void ThreadProc() 
{ 
    Form2 f; 
    Application.Run(new Form2()); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc)); 
    t.Start(); 
    this.Close(); 
} 
相關問題