怎样判断此子窗体是否已经打开?

打转的风铃 2010-01-21 10:28:27
说的简单点,就是我做了一个按钮,点击就show这个子窗体,但是如果再点这个按钮的时候,因为子窗体没有关闭就会出错,我怎么点击时候判断它是否打开,如果打开就先关闭,再show.


谢谢大家!!!^_^
...全文
397 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
叁宝 2010-12-10
  • 打赏
  • 举报
回复

bool temp = false;
foreach (Form form in Application.OpenForms)
{
if (form.Name == "form2")
{
temp = true;
form.Focus();//这就是让那个窗体弹出来,至于其他的操作你也可以写在这里面
//return;//return or break
}
}
if (!temp)
{
form2 f2= new form2();
f2.Show();
}
chenwc_csu 2010-03-31
  • 打赏
  • 举报
回复
谢谢,正需要。
cwq818 2010-01-21
  • 打赏
  • 举报
回复
//遍历主窗口上的所有子菜单
for (int i = 0; i < this.MdiChildren.Length; i++)
{
string s=this.MdiChildren[i].Tag.ToString().ToLower();
if (== or.FormInstance.ToLower()) {
//打开了
}ELSE{
//没打开
}
}
打转的风铃 2010-01-21
  • 打赏
  • 举报
回复
我22L写的能处理么???
dapsxianfeng2010 2010-01-21
  • 打赏
  • 举报
回复

Private Frm2 GetFrm2()
{
if (Frm1.frm2 != null)
{
Frm1.frm2.Close();
}

Frm2 frm2 = new Frm2();

Frm1.frm2 = frm2;
return frm2;
}
王子样 2010-01-21
  • 打赏
  • 举报
回复
用全局静态变量记录一个窗体的显示、关闭状态,然后判断这个变量就可以了。这个应该很简单的说。
zagj11 2010-01-21
  • 打赏
  • 举报
回复
学习了。hoho
dapsxianfeng2010 2010-01-21
  • 打赏
  • 举报
回复
等会给你找断代码
mohugomohu 2010-01-21
  • 打赏
  • 举报
回复
单例模式
打转的风铃 2010-01-21
  • 打赏
  • 举报
回复
20,你别生气,不是this的问题,是即使打开了form2,this.OwnedForms的维数还是0!就这样!!!
打转的风铃 2010-01-21
  • 打赏
  • 举报
回复
16L啊,
foreach (Form form2 in Application.OpenForms)
{
if (form2.Name == "Form3")
{
//这里怎么关闭打开的form3窗体啊?
}

}


Form3 form = new Form3(str);

form.Show();
mngzilin 2010-01-21
  • 打赏
  • 举报
回复
真郁闷,抄都抄不全,无奈。
mngzilin 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 cljlove 的回复:]
12L的不行,为什么我打开了f3,this.OwnedForms获取子窗体的个数还是null呢?

我再试试16L的!
[/Quote]
fm.Show(this);

你有这个吗?红色的
打转的风铃 2010-01-21
  • 打赏
  • 举报
回复
12L的不行,为什么我打开了f3,this.OwnedForms获取子窗体的个数还是null呢?

我再试试16L的!
mngzilin 2010-01-21
  • 打赏
  • 举报
回复
许多人会设置一些全局变量,这的确有时候会方便些,但是不必要的全局变量会打乱整个程序的结构性,如果你会用反射的相关知识,这会是非常容易解决的。即使不用反射,基本.net平台的方法起码要掌握。即使没有掌握,临场发掘也是非常重要的。
yafeya 2010-01-21
  • 打赏
  • 举报
回复
如果在子窗口的集合里面判断的话可以订购HandleCreated事件。
yuan1238 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hhc123 的回复:]
C# codeApplication.OpenForms
[/Quote]

顶起

foreach(Form form in Application.OpenForms)
{
if(form.Name == "要打开的窗口的名字(Name属性)")
{
form.Focus();//这就是让那个窗体弹出来,至于其他的操作你也可以写在这里面
return;//return or break
}
}
cykevin 2010-01-21
  • 打赏
  • 举报
回复
在Form1中定义一下
private Form f2=null;
mngzilin 2010-01-21
  • 打赏
  • 举报
回复
不要随便设置全局变量,那是种资源浪费。

.net已经提供了获取子窗体的方法,在Show(this)时候定义拥有者窗体,然后this.OwnedForms获取子窗体,遍历子窗体就可以了。
lanfengsese 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mngzilin 的回复:]
测试下:

C# codepublicvoid button1_Click(object sender, EventArgs e)
{
Form[] f=this.OwnedForms;//获取子窗体foreach (Form f1in f)//遍历子窗体 {if (f1is Form2)//如果是Form2 f1.Close();
}

Form2 fm=new Form2();
fm.Show(this);
}
[/Quote]
up
加载更多回复(12)

110,561

社区成员

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

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

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