在網上找來一些方式,感受還都不錯,下面給出方式:html
在線掃描相機的調試過程當中,須要開闢調試界面來進行位置的配置。調試結束後,一種經常使用的方式是將調試參數保存並在下次啓動時加載。另外一種簡單方式是直接使用該參數運行程序。所以,在後一種狀況下,須要實現的功能是:即便關閉調試窗口,其窗口對象也不釋放。除非其主窗口關閉,才銷燬其調試窗口的對象。markdown
在主窗口中實例化子窗口,而不是在按鈕中實例化子窗口對象。ide
Form2 f2 = new Form2();
在按鈕中須要實現的是窗口的顯示函數
private void Config_Click(object sender, EventArgs e) { f2.Show(); }
經查詢和實證,修改子窗口中Dispose的方法是可行的。更改以下:
protected override void Dispose(bool disposing) { Hide(); //if (disposing && (components != null)) //{ // components.Dispose(); //} //base.Dispose(disposing); }
因爲須要在父窗口關閉是銷燬子窗口對象,所以,在父窗口的關閉動做FormClosed中添加調用子窗口f2的銷燬函數。ui
private void Form1_FormClosed(object sender, FormClosedEventArgs e) { f2.Close(); }
子窗口類中添加的關閉函數以下:this
public void Close() { this.Dispose(); }
出處:http://blog.csdn.net/u013698770/article/details/53521180spa
===================================================================================.net
另外還有一種方式:調試
父窗體
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.htmlcode
========================================================================
根據上面的說明,咱們本身實現本身的功能,個人功能其實很簡單,就一行代碼,釋放資源,
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; };中使用的參數,不要和按鈕事件中參數名相同,注意參數衝突。