C# 關閉子窗體釋放子窗體對象問題
阿新 • • 發佈:2018-08-30
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# 關閉子窗體釋放子窗體對象問題