簡體   English   中英

如何從Windows窗體2.0中的子窗體關閉父窗體?

[英]How do I close a parent Form from child form in Windows Forms 2.0?

我需要從Windows應用程序中關閉子窗體內的父窗體。 最好的方法是什么?

我跑過這個看起來會起作用的博客條目,它使用了D2VIANT答案中的事件處理程序概念

http://www.dotnetcurry.com/ShowArticle.aspx?ID=125

摘要:步驟1:創建新的Windows應用程序。 打開Visual Studio 2005或2008.轉到文件>新建>項目>在“項目類型”>“Windows應用程序”中選擇“Visual Basic”或“Visual C#”。 為項目命名和位置>確定。

第2步:向項目添加一個新表單。 右鍵單擊項目>添加> Windows窗體> Form2.cs>添加。

第3步:現在在Form1中,拖放一個按鈕'btnOpenForm'並雙擊它以生成一個事件處理程序。 在其中寫下以下代碼。 還要添加frm2_FormClosed事件處理程序,如下所示:

    private void btnOpenForm_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed);
        frm2.Show();
        this.Hide();
    }


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

當您在WinForms中關閉表單時,它會處置它的所有子項。 所以這不是一個好主意。 您需要異步執行此操作,例如,您可以向父表單發送消息。

Form類沒有提供對'parent'表單的任何類型的引用,因此沒有直接訪問父類的方法(除非它恰好是MDI父類,在這種情況下你可以通過MDIParent屬性訪問它) )。 您必須在子項的構造函數或屬性中傳遞對父項的引用,然后記住設置它,然后使用該引用強制關閉父項。

也許考慮讓父母訂閱孩子的事件,孩子可以在想要關閉父母時觸發該事件。 然后父母可以處理它自己的關閉(以及孩子的關閉)。

您顯然是使用正確的方式來打開和關閉表單。 如果您使用任何形式的MVC或MVP,則不會出現此問題。

因此,使用MVP或MVC的形式來解決這個問題。

我同意davidg; 您可以將父表單的引用添加到子表單的構造函數,然后根據需要關閉父表單:

private Form pForm;
public ChildForm(ref Form parentForm)
{
    pForm = parentForm;
}

private closeParent()
{
    if (this.pForm != null)
        this.pForm.Close();
    this.pForm = null;
}

有一個非常簡單的解決方案。

問題(可以肯定):啟動應用程序(主窗體)>主要窗體的開放子窗體VIA按鈕或任何事件>關閉(主窗體)但子窗體也關閉。

方案:

使用: Process.Start("Your_App's_EXE_Full_Path.exe");

示例:嘗試此操作以獲取完整路徑:

  1. string FullPath = Environment.CurrentDirectory + "\\\\YourAppName.exe";

  2. Process.Start(FullPath);

  3. this.Close();

    • 這樣你就可以保持你想要保持開放的每一個形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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