帮忙解决一下这个小问题!!

t6786780 2009-09-14 10:36:09
废话不说, 先贴代码
private void tsBtnDvd_Click(object sender, EventArgs e)
{
DVDManagerForm dvdManagerForm = new DVDManagerForm();
dvdManagerForm.MdiParent = this;
dvdManagerForm.Show();
}

这样打开窗口有一个弊端就是.. 当打开一个窗口的时候会继续弹出来, 一直点一直弹.所以就造成了泛滥.. 我原先想法是把
DVDManagerForm dvdManagerForm = new DVDManagerForm(); 放置到方法的外边..但是C#直接就给把资源释放了.. 我直接晕菜.. 有什么好的方法让它值弹出一次..
另外再解决一个问题: 我发现C#释放资源的时候并没有完全释放. 只是把堆里的释放了..有没有办法把释放的资源重新回收回来!!!
...全文
71 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-09-14
  • 打赏
  • 举报
回复
防止多次实例化
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;
}
十八道胡同 2009-09-14
  • 打赏
  • 举报
回复
你可以自己释放资源 GC

BitCoffee 2009-09-14
  • 打赏
  • 举报
回复

//主窗体中:
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;
t6786780 2009-09-14
  • 打赏
  • 举报
回复
3楼的你的 想法太疯狂了... 为什么我没有想到...抽自己的脸!!
dylike 2009-09-14
  • 打赏
  • 举报
回复
For each fm as form in me.openforms
cg173619268 2009-09-14
  • 打赏
  • 举报
回复
定义一个static int count=0;
当弹出来一个得窗体的时候吧 count=1
关闭的时候吧count=0
这样当点击事件的时候判断下count==0
如果等于的话 就让他show()出来
不等于的话就不执行下面的代码
这样就可以控制了 扩展也很方便 如果你只让show()出来两个窗体
你可以判定 count<2这样 来做就可以 自己试验下
t6786780 2009-09-14
  • 打赏
  • 举报
回复
遍历哪个类!!!
dylike 2009-09-14
  • 打赏
  • 举报
回复
先For each检查下有没有这个名字的窗体,如果有说明已经打开,则Show该窗体.否则就NEW一个新的出来.

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧