C#關閉子窗口而不釋放子窗口對象的問題解決


在網上找來一些方式,感覺還都不錯,下面給出方式:

在線掃描相機的調試過程中,需要開辟調試界面來進行位置的配置。調試結束后,一種常用的方式是將調試參數保存並在下次啟動時加載。另一種簡單方式是直接使用該參數運行程序。因此,在后一種情況下,需要實現的功能是:即使關閉調試窗口,其窗口對象也不釋放。除非其主窗口關閉,才銷毀其調試窗口的對象。

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

  在主窗口中實例化子窗口,而不是在按鈕中實例化子窗口對象。

 Form2 f2 = new Form2();

2 通過按鈕來顯示主窗口

  在按鈕中需要實現的是窗口的顯示

private void Config_Click(object sender, EventArgs e) { f2.Show(); }

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

經查詢和實證,修改子窗口中Dispose的方法是可行的。更改如下:
 protected override void Dispose(bool disposing) { Hide(); //if (disposing && (components != null)) //{ // components.Dispose(); //} //base.Dispose(disposing); }

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

  由於需要在父窗口關閉是銷毀子窗口對象,因此,在父窗口的關閉動作FormClosed中添加調用子窗口f2的銷毀函數。

 private void Form1_FormClosed(object sender, FormClosedEventArgs e) { f2.Close(); } 

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

 public void Close() { this.Dispose(); }

 

出處:http://blog.csdn.net/u013698770/article/details/53521180

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

另外還有一種方式:

子窗體定義一個委托,父窗體實例化子窗體時注冊子窗體的委托事件(具體功能是實現父窗口的控件變化),子窗體關閉時調用事件方法。
   
父窗體
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

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

根據上面的說明,我們自己實現自己的功能,我的功能其實很簡單,就一行代碼,釋放資源,

Form2 fui = null;

private void button1_Click(object sender, EventArgs e)
        {
            if (fui == null)
                fui = new userUserInfo();
            fui.MdiParent = this;
            fui.FormClosed += delegate(object obj, FormClosedEventArgs arg) { fui = null; };
            fui.Show();
            fui.Activate();
        }

但需要注意,在 fui.FormClosed += delegate(object obj, FormClosedEventArgs arg) { fui = null; };中使用的參數,不要和按鈕事件中參數名相同,注意參數沖突。


免責聲明!

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



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