有什么办法解决重复窗体的问题! if (fMain==null) //判断某窗口是否已经存在{ fMain =new MainForm(); //不存在就NEW一个 fMain.Show();}else fMain.Show(); //存在就SHOW 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不行啊!你着个方法不行啊!! 我测试了的! 我改成:Form3 frmnew=new Form3(); if (frmnew==null) //判断某窗口是否已经存在 { frmnew=new Form1(); //不存在就NEW一个 frmnew.Show(); } else frmnew.Show(); //存在就SHOWFORM3是新窗体,FORM1是主窗体!可是运行起来:Form1.cs(167): 无法将类型“窗体调用.Form1”隐式转换为“窗体调用.Form3”怎么回事呢? 代码如下:foreach(Form f in this.MdiChildren) { if (f is ChildForm) { f.Focus(); f.WindowState = FormWindowState.Maximized; return; } } 对还要加下人else就new 一个新的ChildForm frmGiBase = new ChildForm(); frmGiBase.WindowState = FormWindowState.Maximized; frmGiBase.MdiParent = this; frmGiBase.Show(); ....NO!! 我的意思是不想在MDI中这样啊! 就是一般的窗体中,不重复显示!而且我发现连接数据库时也不能这样啊,要不然就会出错!怎么解决非MDI窗体的重复显示问题呢?? /*方法1:*/ArrayList popupForms=new ArrayList;//...Form1 form=new Form1();popupForms.Add(form);//...foreach(Form form in popupForms){ if(...) //....}/*方法2*/public Form2:Form{private static bool createCount=0;public static int InstatceCount{get { return createCount;}} public Form2(){//....createCount++;}~Form2(){createCount--;}} ...........楼上的兄弟.....非常感谢你啊!但是你能不能写清楚一点呢!!比如IF(...),还有注释啊! 我才学C#啊~~~~~~帮帮忙啊! ArrayList forms=new ArrayList(); private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { if (e.Button.Text.ToString().Trim()=="商品编码") { MessageBox.Show(this.forms.Count.ToString()); int i=0; foreach(System.Windows.Forms.Form tform in this.forms) { if (tform.ToString()=="WindowsApplication4.Form2, Text: Form2") { MessageBox.Show("子窗体已经生成,不能再生成"); break; } else { if (i==0) { i=1; Form2 myform2=new Form2(); this.forms.Add(myform2); //MessageBox.Show(myform2.ToString() ); myform2.Show(); } } } } } 这段代码就是将你的代码中的this.MdiChildren集合用this.forms(见ArrayList forms=new ArrayList();)代替了。 你先类中声明一个form Form1 frm;然后在你的触发事件中这样写if(frm!=null){ if(frm.IsDisposed) { frm.Dispose(); frm=new New(); frm.MdiParent=this; } frm.Show();}else{ frm=new New(); frm.MdiParent=this; frm.Show();}这样就可以解决这个问题,我已经试过了! 如果不是MDI 窗体的,就把这一句frm.MdiParent=this;去掉! 谢谢我还想问一下:frm=new New();中的New是指的哪个窗体? 不好意思,New() 是我写错了,将New() 改为form1() 就可以了! 如果改成FORM1,编译通不过的!不过我是这样改的!private Form3 frm;if(frm!=null) { if(frm.IsDisposed) { frm.Dispose(); frm=new Form3(); frm.Owner=this; //激活FORM3,使之处于最前 //frm.MdiParent=this; } frm.Show(); } else { frm=new Form3(); //frm.MdiParent=this; frm.Show(); }这样就完全正常了! ;) 如何在C#中往Access数据库以及SQL Serve中插入日期型数据 c# 多线程异步操作Dictionary' 如何画一个表盘样式的东西~~~ 如何实现读取数据库中的表? 求源代码显示 c# 转 c c#中怎么用SSTab的TabEnabled属性? 读取数据库内存储的时间段内的数据 结论页面格式问题 使用[DllImport("GDI32.DLL")],报告说DllImport找不到或是没有using.... 很簡單的問題﹐關于listBox的 怎样触发toolBar控件的按钮click事件?
if (frmnew==null) //判断某窗口是否已经存在
{
frmnew=new Form1(); //不存在就NEW一个
frmnew.Show();
}
else
frmnew.Show(); //存在就SHOW
FORM3是新窗体,FORM1是主窗体!可是运行起来:
Form1.cs(167): 无法将类型“窗体调用.Form1”隐式转换为“窗体调用.Form3”
怎么回事呢?
foreach(Form f in this.MdiChildren)
{
if (f is ChildForm)
{
f.Focus();
f.WindowState = FormWindowState.Maximized;
return;
}
}
就new 一个新的
ChildForm frmGiBase = new ChildForm();
frmGiBase.WindowState = FormWindowState.Maximized;
frmGiBase.MdiParent = this;
frmGiBase.Show();
//...
Form1 form=new Form1();
popupForms.Add(form);
//...
foreach(Form form in popupForms)
{
if(...)
//....
}
/*方法2*/
public Form2:Form
{
private static bool createCount=0;
public static int InstatceCount
{
get { return createCount;}
}
public Form2()
{
//....
createCount++;
}
~Form2()
{
createCount--;
}
}
private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if (e.Button.Text.ToString().Trim()=="商品编码")
{
MessageBox.Show(this.forms.Count.ToString());
int i=0;
foreach(System.Windows.Forms.Form tform in this.forms)
{
if (tform.ToString()=="WindowsApplication4.Form2, Text: Form2")
{
MessageBox.Show("子窗体已经生成,不能再生成");
break;
}
else
{
if (i==0)
{
i=1;
Form2 myform2=new Form2();
this.forms.Add(myform2);
//MessageBox.Show(myform2.ToString() );
myform2.Show();
}
}
}
}
}
this.forms(见ArrayList forms=new ArrayList();)
代替了。
Form1 frm;然后在你的触发事件中这样写
if(frm!=null)
{
if(frm.IsDisposed)
{
frm.Dispose();
frm=new New();
frm.MdiParent=this;
}
frm.Show();
}
else
{
frm=new New();
frm.MdiParent=this;
frm.Show();
}
这样就可以解决这个问题,我已经试过了!
frm.MdiParent=this;
去掉!
frm=new New();中的New是指的哪个窗体?
将New() 改为form1() 就可以了!
不过我是这样改的!
private Form3 frm;if(frm!=null)
{
if(frm.IsDisposed)
{
frm.Dispose();
frm=new Form3();
frm.Owner=this; //激活FORM3,使之处于最前
//frm.MdiParent=this;
}
frm.Show();
}
else
{
frm=new Form3();
//frm.MdiParent=this;
frm.Show(); }这样就完全正常了! ;)