32.4 How do I check to see if a child form is already displayed so I don't have two instances showing? Here are two ways you can do this. i) Within the parent MDI form, use code such as this:
// MyChildForm is the one I'm looking for
MyChildForm childForm = null;
foreach(Form f in this.MdiChildren)
{
if(f is MyChildForm)
{
// found it
childForm = (MyChildForm) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
childForm.Focus();
}
else
{
childForm = new MyChildForm();
childForm.MdiParent = this;
childForm.Show();
childForm.Focus();
}
// MyChildForm is the one I'm looking for
MyChildForm childForm = null;
foreach(Form f in this.MdiChildren)
{
if(f is MyChildForm)
{
// found it
childForm = (MyChildForm) f;
break;
}
}
if( childForm != null)
{
childForm.Show();
childForm.Focus();
}
else
{
childForm = new MyChildForm();
childForm.MdiParent = this;
childForm.Show();
childForm.Focus();
}
打开普通窗体!
//在CLICK外先定义frm;
zjdb frm=null;private void pictureBox3_Click(object sender, System.EventArgs e)
{
if(frm==null)
{
frm=new zjdb();
frm.Show();
}
frm.Focus();
}
{
zjdb frm=new zjdb();
frm.Show(); //错误
frm.ShowDialog();
}
{
private static ArrayList _forms = new ArrayList();
public static void Insert(Form form)
{
_forms.Add(form);
} public static void Delete(Form form)
{
_forms.Remove(form);
} public static Form GetForm(string str)
{
foreach(Form form in _forms)
{
if(form.Name == str)
{
return form;
}
}
return null;
}其中,生成一窗口时,可指定其名称
当点击picturebox时,可以得到一于picturebox相关的唯一变量.假设为str
MyForm form;
form = (MyForm)FormItems.GetForm(str);
if(form == null)
{
form = new MyForm();
form.Name = str;
}
FormItems.Insert((Form)form);
form.Show();
当窗口关闭是
在窗口closed响应中加入:
FormItems.Remove((Form)this);
另外上面的FormItems中的ArrayList变量可以根据情况分配,释放空间。不过我没试,你自己可以试一下。另外我还是感觉这个方法比较笨。
MyForm form;
form = (MyForm)FormItems.GetForm(str);
if(form == null)
{
form = new MyForm();
form.Name = str;
FormItems.Insert((Form)form);
form.Show();
}
else
{
form.Activate();
} 关闭窗口时:
FormItems.Delete((Form)this);
受教了!
打开普通窗体!
//在CLICK外先定义frm;
zjdb frm=null;private void pictureBox3_Click(object sender, System.EventArgs e)
{
if(frm==null || frm.Disposing=true)
{
frm=new zjdb();
frm.Show();
}
frm.Activate();
}
这样就可以了。
窗体关闭以后也可以再次打开。
后来一调试,还真的不行!
自己没找出解决方法!谢谢了!
关闭窗体以后,还是打不开窗体!
if(frm==null || frm.Disposing=true)
//还是
if(frm==null || frm.Disposing=t=rue)
如果真是只能打开一个,那就用Singleton模式。
如果要精确控制打开n个,那在子窗体中加个static的计数器,每创建时判断是否已创建够了。创建一个,计数器++,每关闭一个计数器--
应该是:
在方法外部定义:
Print p
在方法内部写:
if(p==null || p.IsDisposed)
{
p=new Print();
p.Show();
}
else
{
p.Activate();
}
绝对可行。
Print p
在方法内部写:
if(p==null || p.IsDisposed)
{
p=new Print();
p.Show();
}
else
{
p.Activate();
}
绝对可行。打开本窗体是可以了!
但是,当本窗体还打开时,再打开别的窗体就不行了!
请你再指点一下!