C# winform如何判断窗口是否已经打开

zhangshuqiang123 2010-08-19 11:47:32

//判断窗口是否已经打开
private bool CheckFormIsOpen(string Forms)
{
bool bResult = false;
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == Forms)
{
bResult = true;
break;
}
}
return bResult;
}


private void chart0_MouseDoubleClick(object sender, MouseEventArgs e)
{

if (e.Button == MouseButtons.Left)
{
//Detailed Chart0 = new Detailed(1, status);
//if (!CheckFormIsOpen("Chart0"))
//{
// Chart0.Show();
//}
//else
//{
// Form frm = Application.OpenForms["Chart0"];
// Chart0.Focus();
//}

Detailed Chart0 = new Detailed(1, status);
if (Application.OpenForms["Chart0"] == null)
{
Chart0.Show();
}
else
{
Form frm = Application.OpenForms["Chart0"];
Chart0.Focus();
}
}
}
这样都不行的,哎。教教我吧,就是当我已经打开了一个窗口之后,第二次再双击打开窗口的时候,不打开新窗口,把焦点放到原来打开的那个窗口上。。。
...全文
8916 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mitchellaspnet 2010-12-15
  • 打赏
  • 举报
回复
//判断窗口是否已经打开
private bool CheckFormIsOpen(string Forms)
{
bool bResult = false;
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == Forms)
{
bResult = true;
break;
}
}
return bResult;
}

private void pbFace_Click(object sender, EventArgs e)
{
FormMsg msgForm =null;
bool wExist = this.CheckFormIsOpen("FormMsg");

if (!wExist)
{
msgForm = new FormMsg(oCurrentUser);
msgForm.Text = "登录用户信息";
msgForm.Show();
msgForm.Focus();
}
else
{
msgForm = (FormMsg)Application.OpenForms["FormMsg"];
msgForm.Show();
msgForm.Focus();
}
}
raymond123456 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 rcy5211314 的回复:]
if (addcof != null)
{
if (addcof.IsDisposed)//如果已经销毁,则重新创建子窗口对象
{
addcof = new AddConsigneeForm();//此为你双击打开的FORM
addcof.Show();
addcof.Focus();
}
else
{
addcof.Show(); 这样……
[/Quote]
最小化,再次打开也是只打开一个窗口
zhangshuqiang123 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 baobaoyajiaoban 的回复:]
引用 11 楼 hucailin 的回复:
用单例模式
private static FrmCallOut instance;
public static FrmCallOut GetInstance()
{
if (instance == null)
{
instance = new FrmCallOut();
}
return instance;
}

是的,在你要判断……
[/Quote]

哇,我都没用到过这些,哈哈,学习一下
zhangshuqiang123 2010-08-19
  • 打赏
  • 举报
回复
都是过了,还是没有用,每次这个
                else
{
Form frm = Application.OpenForms["Chart0"];
Chart0.Focus();
}

都跳不进去
zhangshuqiang123 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 weixiaoyiyou 的回复:]

例如 C# code
if (Form_lstMSchedule_g == null || Form_lstMSchedule_g.IsDisposed)
{
Form_lstMSchedule_g = new Form_lstMSchedule();
Fo……
[/Quote]

我试试哈,嘿嘿
weixiaoyiyou 2010-08-19
  • 打赏
  • 举报
回复
例如
if (Form_lstMSchedule_g == null || Form_lstMSchedule_g.IsDisposed)
{
Form_lstMSchedule_g = new Form_lstMSchedule();
Form_lstMSchedule_g.MdiParent = this;
Form_lstMSchedule_g.Parent = CreateTabPage(tbCntrl_Main, tag, text);
Form_lstMSchedule_g.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
Form_lstMSchedule_g.WindowState = System.Windows.Forms.FormWindowState.Maximized;
Form_lstMSchedule_g.Show();
}
else
{
tbCntrl_Main.SelectedTab = ((TabPage)Form_lstMSchedule_g.Parent);
}

这是我以前写的一段代码,实际上你要的就是第一句if判断窗口是否打开,楼主可以结贴了,给分吧
jointan 2010-08-19
  • 打赏
  • 举报
回复
foreach (Form frm in Application.OpenForms)
{
if (frm is Detailed)
{
frm.Activate();
frm.WindowState = FormWindowState.Normal;
return;
}
}
Detailed form2 = new Detailed();
form2.Show();
zhangyanyang 2010-08-19
  • 打赏
  • 举报
回复

private bool checkChildFrmExist(string childFrmName)//参数窗体名称
{
foreach (Form childFrm in this.MdiChildren)
{
if (childFrm.Name == childFrmName)
{
if (childFrm.WindowState == FormWindowState.Minimized)
childFrm.WindowState = FormWindowState.Normal;
childFrm.Activate();
return true;
}
}
return false;
}
baobaoyajiaoban 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hucailin 的回复:]
用单例模式
private static FrmCallOut instance;
public static FrmCallOut GetInstance()
{
if (instance == null)
{
instance = new FrmCallOut();
}
return instance;
}
[/Quote]
是的,在你要判断的FORM中写单例,然后在按钮事件中获取
FORM form=FORM.GetInstance();
form.show();
就可以了
kangyanwen2003 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hucailin 的回复:]
用单例模式
private static FrmCallOut instance;
public static FrmCallOut GetInstance()
{
if (instance == null)
{
instance = new FrmCallOut();
}
return instance;
}
[/Quote]
UP
rcy5211314 2010-08-19
  • 打赏
  • 举报
回复
if (addcof != null)
{
if (addcof.IsDisposed)//如果已经销毁,则重新创建子窗口对象
{
addcof = new AddConsigneeForm();//此为你双击打开的FORM
addcof.Show();
addcof.Focus();
}
else
{
addcof.Show(); 这样如果那窗体打开着 只是最小化了,会不会在打开一次呀?
addcof.Focus();
}
冰凝瞬间1986 2010-08-19
  • 打赏
  • 举报
回复
用单例模式
private static FrmCallOut instance;
public static FrmCallOut GetInstance()
{
if (instance == null)
{
instance = new FrmCallOut();
}
return instance;
}
raymond123456 2010-08-19
  • 打赏
  • 举报
回复

/// <summary>
/// 重绘新增窗体
/// </summary>
private void GetnewForm()
{
if (addcof != null)
{
if (addcof.IsDisposed)//如果已经销毁,则重新创建子窗口对象
{
addcof = new AddConsigneeForm();//此为你双击打开的FORM
addcof.Show();
addcof.Focus();
}
else
{
addcof.Show();
addcof.Focus();
}
}
else
{
addcof = new AddConsigneeForm();
addcof.Show();
addcof.Focus();
}
}

这个是正确的
raymond123456 2010-08-19
  • 打赏
  • 举报
回复

/// <summary>
/// 重绘新增窗体
/// </summary>
private void GetnewForm()
{
if (addcof != null)
{
if (addcof.IsDisposed)//如果已经销毁,则重新创建子窗口对象
{
addcof = new AddConsigneeForm();//此为你双击打开的FORM
addcof.Show();
addcof.Focus();
}
else
{
addcof.Show();
addcof.Focus();
}
}
else
{
addcof = new AddConsigneeForm();
addcof.Show();
addcof.Focus();
}
addcof.Show();
}
天地英豪 2010-08-19
  • 打赏
  • 举报
回复
那这样就简单了,用一个成员窗口变量

if (frm==null || frm.isdispose() )
{ frm=new form();
frm.show();
}
else
frm.active();
zhangshuqiang123 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangshiwei1105 的回复:]

不晓得LZ是不是用的MDI,这有个例子.
C# MDI导航子窗体 子窗体只运行一次
http://download.csdn.net/source/2581280
[/Quote]

不是MDI,是主窗口上双击按钮 弹出一个窗口,再双击这个按钮的时候 显示原先打开的哪个窗口
天地英豪 2010-08-19
  • 打赏
  • 举报
回复
不晓得LZ是不是用的MDI,这有个例子.
C# MDI导航子窗体 子窗体只运行一次
http://download.csdn.net/source/2581280

110,502

社区成员

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

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

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