WinFrom 判断窗体是否已存在?

zhaozhijun0207 2009-02-26 05:48:52
WinFrom C# SQL2000

看过些帖子,可惜都是vb的.

From1 obj1=new From1();
From1 obj1=new From1();

From1窗体中点击个Button,就弹出From2窗体.
如果From2已存在,就不再new From2 了.

怎么判断?
C#语法.
...全文
838 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
huao 2009-11-29
  • 打赏
  • 举报
回复
Singleton Pattern 模式,较好用.不过占资源
zhaozhijun0207 2009-02-27
  • 打赏
  • 举报
回复

//直接使用单例模式吧,就一个实例。
public partial class Form2 : Form
{
//将构造函数声明为私有,禁止外部创建
private Form2()
{
InitializeComponent();
}
//声明唯一的Form2实例对象
private static Form2 frm2;
//外部通过该方法获取Form2的唯一实例
public static Form2 GetInstance()
{
if(frm2 == null || frm2.IsDisposed)
{
frm2 = new Form2();
}

return frm2;
}
}

//好处:全局(该线程中)就一个Form2实例;
//坏处:该实例一旦创建,将一直存在(因为是静态的);
//注意:如果是多线程,则需要对GetInstance方法进行改进,使用lock进行判断;





//在Form1中调用的时候用以下代码即可:
Form2 frm2 = Form2.GetInstance();
//不用再管有多少个实例了,form2自己负责维护自己的唯一实例,很爽。



zhaozhijun0207 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 gisyellow 的回复:]
在Form1中调用的时候用以下代码即可:
Form2 frm2 = Form2.GetInstance();
不用再管有多少个实例了,form2自己负责维护自己的唯一实例,很爽。
[/Quote]

这个例子不错啊.
yingmu 2009-02-26
  • 打赏
  • 举报
回复
当然,如果你只是单纯是想知道某一个窗口是否已经被打开了,可以直接循环遍历MDI窗口的子窗口列表
foreach (System.Windows.Forms.Form f in MDIForm.MdiChildren)
{
if (ChildForm.GetType() == f.GetType())
......
}
yingmu 2009-02-26
  • 打赏
  • 举报
回复
当然,如果你只是单纯是想知道某一个窗口是否已经被打开了,可以直接循环遍历MDI窗口的子窗口列表
foreach (System.Windows.Forms.Form f in MDIForm.MdiChildren)
{
if (ChildForm.GetType() == f.GetType())
......
}
yingmu 2009-02-26
  • 打赏
  • 举报
回复
Form frm1 = null;//给MDI主窗口定义一个实例变量,初始为null
... ...
private void button1_click(object sender, EventArgs e)//按钮或菜单的点击事件
{
if(frm1 == null || frm1.IsDisposed)//如果窗口还没有被创建或已关闭,就再创建一个
{
frm1 = new Form();
frm1.MdiParent = this;
}
frm1.WindowState = System.Windows.Forms.FormWindowState.Maximized;
frm1.Show();
}
gisyellow 2009-02-26
  • 打赏
  • 举报
回复
在Form1中调用的时候用以下代码即可:
Form2 frm2 = Form2.GetInstance();
不用再管有多少个实例了,form2自己负责维护自己的唯一实例,很爽。
gisyellow 2009-02-26
  • 打赏
  • 举报
回复
直接使用单例模式吧,就一个实例。
public partial class Form2 : Form
{
//将构造函数声明为私有,禁止外部创建
private Form2()
{
InitializeComponent();
}
//声明唯一的Form2实例对象
private static Form2 frm2;
//外部通过该方法获取Form2的唯一实例
public static Form2 GetInstance()
{
if(frm2 == null || frm2.IsDisposed)
{
frm2 = new Form2();
}

return frm2;
}
}

好处:全局(该线程中)就一个Form2实例;
坏处:该实例一旦创建,将一直存在(因为是静态的);
注意:如果是多线程,则需要对GetInstance方法进行改进,使用lock进行判断;
louhaibing2008 2009-02-26
  • 打赏
  • 举报
回复

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Form2 frm2;
bool ExistFalg = false;
private void button1_Click(object sender, EventArgs e)
{
if (!ExistFalg )
{
frm2 = new Form2();
frm2.Show();
ExistFalg = true;
}
frm2.Activate();
frm2.WindowState = FormWindowState.Normal;
}
}
这样也可以实现的
C_sdnElf 2009-02-26
  • 打赏
  • 举报
回复

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

Form frm1;

private void button1_Click(object sender, EventArgs e)
{

if (frm1 == null || frm1.IsDisposed)
{
frm1 = new Form();
frm1.Show();
}
else
{
frm1.Activate();
frm1.WindowState = FormWindowState.Normal;
}

}
}
}


完整的都贴出来了
C_sdnElf 2009-02-26
  • 打赏
  • 举报
回复

private void btnOK_Click(object sender, EventArgs e)
{

if (frm1 == null || frm1.IsDisposed)
{
Form frm1 = new KHXXFrm();
frm1.Show();
}
else
{
frm1.Activate();
frm1.WindowState = FormWindowState.Normal;
}
}



这样呢?
zhaozhijun0207 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 C_sdnElf 的回复:]
C# code
Form frm1;
private void btnOK_Click(object sender, EventArgs e)
{

if (frm1 == null || frm1.IsDisposed)
{
frm1 = new KHXXFrm();
frm1.Show();
}
else
{
frm1.Activate();
frm1.WindowState = FormWindowState.Normal;
}
}
[/Quote]



错误 14 使用了未赋值的局部变量“frm1”
fenglm999 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lianshaohua 的回复:]
button1.click+=delegate(object sender,eventargs e)
{
if(obj2==null)
{
obj2=new Form2();
}
obj2.show();
};
[/Quote]
这种就可以了
homejiji 2009-02-26
  • 打赏
  • 举报
回复
楼上正解。。
C_sdnElf 2009-02-26
  • 打赏
  • 举报
回复

Form frm1;
private void btnOK_Click(object sender, EventArgs e)
{

if (frm1 == null || frm1.IsDisposed)
{
frm1 = new KHXXFrm();
frm1.Show();
}
else
{
frm1.Activate();
frm1.WindowState = FormWindowState.Normal;
}
}
wangping_li 2009-02-26
  • 打赏
  • 举报
回复
如果是单窗体操作的就设一个bool型变量就行了
人工智能算法 2009-02-26
  • 打赏
  • 举报
回复
new Form2() 的时候 把它用一个全局变量保存
第2次的时候判断是不是为空 如果为空才再使用new

public static Form Form2 = null

button1.click+=delegate(object sender,eventargs e)
{
if(obj2==null)
{
obj2=new Form2();
}
obj2.show();
};
wangping_li 2009-02-26
  • 打赏
  • 举报
回复
new的时候把窗体用HashTable记下来,关闭时把记录的清掉,打开的时先判断其是否已经存在
zgke 2009-02-26
  • 打赏
  • 举报
回复
有个静态变量 public static Form 就控制这个静态变量了.
zzq1996 2009-02-26
  • 打赏
  • 举报
回复
加一个判断
加载更多回复(1)

110,580

社区成员

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

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

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