窗体只运行一个

lgnet 2005-02-22 05:03:27
在C#的主窗体中,如何保证某一个子窗体只能运行一个,而不能够运行多个(以免造成混乱),请求详细的源代码,谢谢!
...全文
109 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
myflyer 2005-03-05
  • 打赏
  • 举报
回复
//现声明一个全局变量
FrmName frmName = new FrmName();


//在调用的时候先判断此实例是否被撤销
if(this.frmName.IsDisposed)
frmName = new FrmName();
frmName.Show();
frmName.Activate();
DoerSoft 2005-02-23
  • 打赏
  • 举报
回复
在MDI模式可行,要SDI中呢?:)
lgnet 2005-02-23
  • 打赏
  • 举报
回复
根据上面各位大虾的指导,我是这样解决问题的

①:打开子窗体代码:
private void menuItem4_Click(object sender, System.EventArgs e)
{
stuinfor stuin = new stuinfor(); //假设stuinfor为某个子窗体
Type type = stuin.GetType(); //定义Type类型的变量type
if (ChildExists(type)) //调用函数并传参
{
}
else
{
stuin.MdiParent = this;
stuin.Show();
}
}
②:检查子窗体是否存在的函数,如果存在,则激活,如果不存在,则打开!
private bool ChildExists(Type type)
{
for(int i = 0; i < this.MdiChildren.Length;i++)
{
Form child = MdiChildren[i];
if(child.GetType() == type) //如果存在,就激活
{
child.Activate();
return true;
}
}
return false;
}
lgnet 2005-02-23
  • 打赏
  • 举报
回复
已经解决,谢谢!!!
tonrew 2005-02-23
  • 打赏
  • 举报
回复
private bool ChildExists(Type type)
{
for(int i = 0; i < this.MdiChildren.Length;i++)
{
Form child = MdiChildren[i];
if(child.GetType() == type)
{
child.Activate();
return true;
}
}
return false;
}
tonrew 2005-02-23
  • 打赏
  • 举报
回复
if(ChildExists(typeof(CallCenter.frmFindLog))) return;

CallCenter.frmFindLog frmlog = new frmFindLog(this);
frmlog.Show();
ansiboy 2005-02-23
  • 打赏
  • 举报
回复
应用单例模式就OK了,自己看看设计与模式的书吧。
lgnet 2005-02-23
  • 打赏
  • 举报
回复
自己顶住!
lgnet 2005-02-22
  • 打赏
  • 举报
回复
还未遇到高手帮忙,这个时候千万别灰心,自己给自己顶住!!!

111,125

社区成员

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

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

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