要使窗體不被重復打開,就要把已經打開的窗體保存下來進行輪尋,我們可以用ArrayList來保存已經打開的窗體實例,當new新的form時,對ArrayList中的Object進行逐個的比較,可以對form的name進行比較,也可以對form的Type進行比較(前者的效率比後者低)。雖然這個方法比較笨,但卻十分有效,具體代碼見下:
MainForm.cs
public static ArrayList FormList = new ArrayList();
private void button1_Click(object sender, System.EventArgs e)
{
bool OnlyForm = true;
foreach( Form f in FormList )
{
if( f is MyForm )
{
f.Activate();
OnlyForm = false;
}
}
if( OnlyForm )
{
MyForm temp = new MyForm ();
temp.Owner = this;
FormList.Add( temp );
temp.Show();
}
}
MyForm.cs
private void MyForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
MainForm.FormList.Remove( this );
}
首先在MainForm中new一個static的FormList,然後在打開窗體時在FromList中輪尋,找到與此類型相一致的就Activate(),否則就new一個新的form,並且加到FormList中,在form退出時千萬別忘記把自己從FormList中退出來,就是用Remove(this)就可以了。