废话不说, 先贴代码
private void tsBtnDvd_Click(object sender, EventArgs e)
{
DVDManagerForm dvdManagerForm = new DVDManagerForm();
dvdManagerForm.MdiParent = this;
dvdManagerForm.Show();
}
这样打开窗口有一个弊端就是.. 当打开一个窗口的时候会继续弹出来, 一直点一直弹.所以就造成了泛滥.. 我原先想法是把
DVDManagerForm dvdManagerForm = new DVDManagerForm(); 放置到方法的外边..但是C#直接就给把资源释放了.. 我直接晕菜.. 有什么好的方法让它值弹出一次..
另外再解决一个问题: 我发现C#释放资源的时候并没有完全释放. 只是把堆里的释放了..有没有办法把释放的资源重新回收回来!!!
private void tsBtnDvd_Click(object sender, EventArgs e)
{
DVDManagerForm dvdManagerForm = new DVDManagerForm();
dvdManagerForm.MdiParent = this;
dvdManagerForm.Show();
}
这样打开窗口有一个弊端就是.. 当打开一个窗口的时候会继续弹出来, 一直点一直弹.所以就造成了泛滥.. 我原先想法是把
DVDManagerForm dvdManagerForm = new DVDManagerForm(); 放置到方法的外边..但是C#直接就给把资源释放了.. 我直接晕菜.. 有什么好的方法让它值弹出一次..
另外再解决一个问题: 我发现C#释放资源的时候并没有完全释放. 只是把堆里的释放了..有没有办法把释放的资源重新回收回来!!!
当弹出来一个得窗体的时候吧 count=1
关闭的时候吧count=0
这样当点击事件的时候判断下count==0
如果等于的话 就让他show()出来
不等于的话就不执行下面的代码
这样就可以控制了 扩展也很方便 如果你只让show()出来两个窗体
你可以判定 count<2这样 来做就可以 自己试验下
//主窗体中:
public static DVDManagerForm dvdManagerForm;private void tsBtnDvd_Click(object sender, EventArgs e)
{
if(dvdManagerForm == null)
{
dvdManagerForm.MdiParent = this;
dvdManagerForm.Show();
}
else
{
dvdManagerForm.Activate();
}
}//注意在DVDManagerForm的Form_Closing事件中:
主窗体.dvdManagerForm = null;
private bool _IsExistChildForm(string _ChildFormName)
{
foreach(Form form in this.MdiChildren)
{
if(string.Compare(form.Name, _ChildFormName, true) == 0)
{
form.BringToFront();
return true;
}
}
return false;
}
或
private void Judge()
{
int Children_Count=this.MdiChildren.Length;
for(int i=0;i<Children_Count;i++)
{
if(this.MdiChildren[i].WindowState==FormWindowState.Maximized )
this.MdiChildren[i].WindowState=FormWindowState.Normal;
}
}
private bool GetInstanceState(string Frm_Name)
{
this.Judge();
int Children_Count=this.MdiChildren.Length;
for(int i=0;i<Children_Count;i++)
{
if (this.MdiChildren[i].Name==Frm_Name )
{
this.MdiChildren[i].WindowState=System.Windows.Forms.FormWindowState.Normal;
this.MdiChildren[i].Focus();
return true;
}
}
return false;
}