[英]How to close C# program, from the second form (not hide) C# Multiform issue
問題:我創建了一個有兩種形式的程序。 當在Form1上按下按鈕時,程序將“隱藏” Form1並“顯示” Form2。 問題是,當我關閉Form2時,程序繼續在后台運行,我認為這是因為程序需要關閉Form1,而不是將其隱藏才能使程序結束。
我的問題是如何覆蓋第二個表格以關閉程序而不是隱藏?
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form1.Hide();
}
我知道我可以再次從Form2中顯示Form1,然后關閉,但是我真的想避免這種情況。
根據您的應用程序的方式,您幾乎沒有其他選擇。
首先,直觀的解決方案是為Form1
調用Close()
而不是Hide()
。 這僅適用於Form1
不是應用程序的主要形式(主要消息循環內部的一個以Application.Run()
開頭)。
第二種解決方案是為Form2
的FormClosed
事件添加事件處理程序,並在第二個表單關閉時關閉第一個表單:
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form2.FormClosed += new FormClosedEventHandler(delegate { Close(); });
Form1.Hide();
}
您可以直接關閉Form1
或調用Application.Exit()
(如果您打開了多個要同時關閉的表單)。
最后一種解決方案是使第二種形式成為第一種形式的所有者 :
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form1.Owner = Form2;
Form1.Hide();
}
當所有者關閉時,這將自動關閉所擁有的表單。 這是我更喜歡的解決方案,但它僅適用於一種形式(所有者只能擁有一種形式)。
您可以使用FormClosed
事件:
private void btnCreate_Click(object sender, EventArgs e)
{
Form2.Show();
Form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
Form1.Hide();
}
void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Form1.Close();
}
在應用程序開發中,特別是對於用戶而言的winforms,總是有一個主表單(無論是mdiparent還是單個父表單),它始終是所有其他表單顯示的主表單。
給出問題的答案將鼓勵糟糕的編程實踐。
讓主窗口關閉,應用程序將結束。 隱藏form1不會結束應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.