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


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM