有什么办法解决重复窗体的问题!

胖胖熊 2003-08-25 01:29:37
我这有个是在MDI窗体下实现的同一个窗体,通过按钮点击的次数来控制的!
private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if (e.Button.Text.ToString().Trim()=="商品编码")
{
MessageBox.Show(this.MdiChildren.Length.ToString());
int i=0;
foreach(System.Windows.Forms.Form tform in this.MdiChildren)
{
if (tform.ToString()=="WindowsApplication4.Form2, Text: Form2")
{
MessageBox.Show("子窗体已经生成,不能再生成");
break;
}
else
{
if (i==0) {
i=1;
Form2 myform2=new Form2();
myform2.MdiParent=this;
//MessageBox.Show(myform2.ToString() );
myform2.Show();}
}

}
}
}


我现在不想在MDI中实现该目的,只想在非MDI窗体中实现,如何做呢?

谢谢!!:)
...全文
72 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
胖胖熊 2003-08-29
  • 打赏
  • 举报
回复
如果改成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();

}

这样就完全正常了! ;)
胖胖熊 2003-08-29
  • 打赏
  • 举报
回复
呵`~~我自己已经解决了!谢谢啊
zhongwanli 2003-08-29
  • 打赏
  • 举报
回复
不好意思,New() 是我写错了,
将New() 改为form1() 就可以了!
胖胖熊 2003-08-29
  • 打赏
  • 举报
回复
谢谢

我还想问一下:
frm=new New();中的New是指的哪个窗体?
qqq123 2003-08-28
  • 打赏
  • 举报
回复
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();
}
}
}
}
}
zhongwanli 2003-08-28
  • 打赏
  • 举报
回复
如果不是MDI 窗体的,就把这一句
frm.MdiParent=this;
去掉!
zhongwanli 2003-08-28
  • 打赏
  • 举报
回复
你先类中声明一个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();
}
这样就可以解决这个问题,我已经试过了!
qqq123 2003-08-28
  • 打赏
  • 举报
回复
这段代码就是将你的代码中的this.MdiChildren集合用
this.forms(见ArrayList forms=new ArrayList();)
代替了。
胖胖熊 2003-08-28
  • 打赏
  • 举报
回复
能不能加点注释啊!谢谢~~~~~~~这段代码我不是很明白
qqq123 2003-08-27
  • 打赏
  • 举报
回复
/*方法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--;
}
}
胖胖熊 2003-08-27
  • 打赏
  • 举报
回复
...........楼上的兄弟.....非常感谢你啊!但是你能不能写清楚一点呢!!比如IF(...),还有注释啊! 我才学C#啊~~~~~~帮帮忙啊!
胖胖熊 2003-08-26
  • 打赏
  • 举报
回复
....NO!! 我的意思是不想在MDI中这样啊! 就是一般的窗体中,不重复显示!

而且我发现连接数据库时也不能这样啊,要不然就会出错!

怎么解决非MDI窗体的重复显示问题呢??
雪狼1234567 2003-08-25
  • 打赏
  • 举报
回复
对还要加下人else
就new 一个新的
ChildForm frmGiBase = new ChildForm();
frmGiBase.WindowState = FormWindowState.Maximized;
frmGiBase.MdiParent = this;
frmGiBase.Show();
雪狼1234567 2003-08-25
  • 打赏
  • 举报
回复
代码如下:
foreach(Form f in this.MdiChildren)
{
if (f is ChildForm)
{
f.Focus();
f.WindowState = FormWindowState.Maximized;
return;
}
}
胖胖熊 2003-08-25
  • 打赏
  • 举报
回复
不行啊!你着个方法不行啊!! 我测试了的! 我改成:

Form3 frmnew=new Form3();
if (frmnew==null) //判断某窗口是否已经存在
{
frmnew=new Form1(); //不存在就NEW一个
frmnew.Show();
}
else
frmnew.Show(); //存在就SHOW


FORM3是新窗体,FORM1是主窗体!可是运行起来:
Form1.cs(167): 无法将类型“窗体调用.Form1”隐式转换为“窗体调用.Form3”


怎么回事呢?

covis 2003-08-25
  • 打赏
  • 举报
回复
if (fMain==null) //判断某窗口是否已经存在
{
fMain =new MainForm(); //不存在就NEW一个
fMain.Show();
}
else
fMain.Show(); //存在就SHOW

110,501

社区成员

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

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

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