C# 中怎样判断一个窗体是否打开,避免多次打开

jasondct 2009-03-06 04:42:09
有一个方法,要打开另外一个窗体fr1 但是每次调用的时候,总是要打开好多次。有什么方法只显示最后一次打开的窗体fr1。
...全文
1176 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenriy 2010-12-21
  • 打赏
  • 举报
回复
C# 中怎样判断一个无边窗体是否打开,避免多次打开
a7211789 2009-03-28
  • 打赏
  • 举报
回复
这个问题目可以通过GOF的单例模式

public partial class Form1: Form
{
private static Form1 form;

private Form1()
{
InitializeComponent();
}
public static Form getForm()
{
if( form==null ||this.Dispose)
{
form = new Form1);
}
return form;
}
}

然后 form2里边 只需调用这个getFrom()
Form1 form=Form1.getFrom();

018 2009-03-08
  • 打赏
  • 举报
回复

Form1 frm=new Form1();
frm.Tag=false;


if(!(bool)frm.Tag)
{
frm.Show();
frm.Tag=true;
}
uncleson88 2009-03-08
  • 打赏
  • 举报
回复

bool opened=false;
foreach(Form f in MdiParent.MdiChildren)
{
if(f.Name=="Form1")
{
opened=true;f.Show();
break;
}
}
if(!opened)
{
Form1 fm=new Form1;
fm.Show();
}

feixuewuhen3812 2009-03-08
  • 打赏
  • 举报
回复
利用单例模式

public partial class Form2 : Form
{
private static Form2 form = null;

private Form2()
{
InitializeComponent();
}
public static Form getForm()
{
if( form==null )
{
form = new Form2();
}
return form;
}
}


然后 form1 里边 只需调用这个getFrom()这个方法就行了
  • 打赏
  • 举报
回复
不过可不是上面那几位写的,他们写的代码太简单了
  • 打赏
  • 举报
回复
呵呵 去网上查查了 有限制窗体多次运行的代码
sohighthesky 2009-03-08
  • 打赏
  • 举报
回复
如果不想用模式窗体的话,
可以先声明一个全局的Form1对象form1;
然后在要打开的窗口事件中:
if(form1==null)
form1=new Form1();
form1.show();
form1.WindowState = FormWindowState.Normal;
ztenv 2009-03-06
  • 打赏
  • 举报
回复
单例
thfthf2 2009-03-06
  • 打赏
  • 举报
回复
可以用一个静态的窗体类对象,初始化时先检查该对象是否为空,为空的话就New,否则直接调用
也可以枚举当前所有的窗口对象,查找该对象(可以根据窗口名称属性),如:
private Form GetForm(string text)
{
foreach (Form f in this.MdiChildren)
{
if (f.Text == text)
{ return f; }
}
return null;
}

然后调用的时候用类似下面的代码:
frmFileDown frm = (frmFileDown)GetForm("归档文件下载");
if (frm == null) { frm = new frmFileDown(); }
frm.MdiParent = this;
frm.WindowState = FormWindowState.Normal;
frm.TopMost = true;
frm.Show();
wxiong1987 2009-03-06
  • 打赏
  • 举报
回复
窗体处理我一般这样做的:
比如需要处理的窗体类是YourForm,那么定义一个YourForm的引用:
privte YourForm yf = null;

然后,需要显示这个Form是如下处理:
if (yf == null)
{
yf = new YourForm();
}
yf.Visible = true;

关闭而不注销该对象则:
if (yf != null)
{
yf.Visible = false;
}

注销该对象(当然,这个注销的实际过程可能不是想象的那样):
if (yf != null)
{
yf.Dispose();
yf = null;
}

用过Qt-Designer的应该都知道,Qt里面自动生成的窗体处理一般都是这样的。
贫僧又回来了 2009-03-06
  • 打赏
  • 举报
回复
要写成方法吗?其实都一样的
public void open(Form fr)
{
fr = new Form();
fr.ShowDialog();
}

private void button1_Click(object sender, EventArgs e)
{
Form dr=new Form();
open(dr);
}
oyljerry 2009-03-06
  • 打赏
  • 举报
回复
form已经打开过了,再次触发的时候,就直接ShowWindow等显示出来,而不是重新创建一个新的
贫僧又回来了 2009-03-06
  • 打赏
  • 举报
回复
form1 frm=new form1();
frm.showdialog();
jasondct 2009-03-06
  • 打赏
  • 举报
回复
普通窗体 怎么显示。我是写网站 ,临时帮别人写个cs小程序
贫僧又回来了 2009-03-06
  • 打赏
  • 举报
回复
是子窗体还是普通的窗体,普通的话直接用模式窗口显示就好了!

111,126

社区成员

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

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

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