簡體   English   中英

如何關閉第二種形式的C#程序(不隱藏)C#Multiform問題

[英]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()開頭)。

第二種解決方案是為Form2FormClosed事件添加事件處理程序,並在第二個表單關閉時關閉第一個表單:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM