1. 程式人生 > >C# 關閉子窗體釋放子窗體對象問題

C# 關閉子窗體釋放子窗體對象問題

action 修改 eply 銷毀 num bool sed 因此 https

1 在主窗口中實例化子窗口

Form2 f2 = new Form2();

2 通過按鈕來顯示子窗口

f2.Show();

3 關閉子窗口而不釋放子窗口對象的方法

protected override void Dispose(bool disposing)
        {
            Hide();
            //if (disposing && (components != null))
            //{
            //    components.Dispose();
            //}
            //base.Dispose(disposing);
        }

(註意:在子窗口Designer文件中修改)

4 在父窗口關閉時銷毀子窗口對象

子窗口類中添加的關閉函數如下:

public void Close()
        {

            this.Dispose();

        }

父窗口關閉是銷毀子窗口對象,因此,在父窗口的關閉動作FormClosed中添加調用子窗口f2的銷毀函數。
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            f2.Close();
        }  

===================================================================================

另外還有一種方式:

子窗體定義一個委托,父窗體實例化子窗體時註冊子窗體的委托事件(具體功能是實現父窗口的控件變化),子窗體關閉時調用事件方法。
父窗體
public void ShowPopWindow()
{
TestA sub = new TestA();
sub.CloseWindow += new Action(sub_CloseWindow);
sub.show();
}

void sub_CloseWindow()
{
//改變父窗體控件內容
}

子窗體
public class TestA
{
public event Action CloseWindow;

protected virtual void OnCloseWindow()
{
Action handler = CloseWindow;
if (handler != null) handler();
}

//子窗體關閉事件
private void CloseSubWindow()
{
OnCloseWindow();
}
}

出處:https://zhidao.baidu.com/question/134623114688436765.html

========================================================================

C# 關閉子窗體釋放子窗體對象問題