窗体之间的调用

sunny906 2008-11-27 03:51:11
实现窗体之间的切换:
有两个Form A和B
在窗体A上有一个button,单击button,弹出窗体B,同时窗体A隐藏
因为窗体A是启动窗体,代码如下buttonclick:

formb fb=new formb();
fb.show();
this.hide();

在窗体B上也有一个button,单击button,弹出窗体A,同时关闭窗体B
button单击事件如下buttonclick:

forma fa=new forma();
fa.show();
this.close();
this.dispose();

窗体B上的关闭标签的事件formaclosing():

forma fa=new forma();
fa.show();
this.dispose();

这样的话,当单击窗体B上的关闭标签时,可以实现关闭B并显示A
但单击B上的button时,会弹出两个A窗体,为什么会这样呢?
我个人认为,当单击B上的button时,会自动触发formclosing事件,是这样吗?
应该怎样解决?
请各位大虾指教一下,谢谢!
...全文
229 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny906 2008-11-29
  • 打赏
  • 举报
回复
谢谢大家啦!
问题搞定了
加分
changqiguo 2008-11-28
  • 打赏
  • 举报
回复
有种很简单的方法
在form的button事件里写this.Hide()
form2=new Form2()
form2.showdialog()
this.show()
在form2的button事件里写this.Close()
就行了
zhyl_yg 2008-11-28
  • 打赏
  • 举报
回复
up
songhongliang 2008-11-27
  • 打赏
  • 举报
回复
你可以在窗体B中声明一个public forma myfrm=null;
然后 在 forma的 BUTTON事件中写
formb fb=new formb();
fb.myfrm=this;
fb.show();
this.hide();


当 单击formb中的BUTTON的事件中这么写:
myfrm.show();
this.close();
这样就可以了。

LZ你犯的错误就是 窗体A隐藏了 你没保存A的应用。
而是新建了一个A,那么 你的这个应用程序进程中存在2个 窗体A。

wesleyluo 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 sunny906 的帖子:]
实现窗体之间的切换:
有两个Form A和B
在窗体A上有一个button,单击button,弹出窗体B,同时窗体A隐藏
因为窗体A是启动窗体,代码如下buttonclick:

formb fb=new formb();
fb.show();
this.hide();

在窗体B上也有一个button,单击button,弹出窗体A,同时关闭窗体B
button单击事件如下buttonclick:

forma fa=new forma();
fa.show();
this.close();
this.dispose();

窗体B上的关闭标签的事件…
[/Quote]
通过我的试验,
根本就不需要些Formclosing()事件。
就可以实现你要的功能,我的是VS2005,为什么你的不可以呢?
kinghongchen 2008-11-27
  • 打赏
  • 举报
回复
在B窗体关闭之前你执行了两次
forma fa=new forma();
fa.show();
这样的话肯定会弹出两个A窗体了,在调用this.Close()时,肯定会触发FormClosing事件的,所以在B按钮单击事件中只需要写this.Close()就行了。
bidisty 2008-11-27
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
this.Close();
//foreach (Form item in Application.OpenForms)
//{
// if (item is Form1)
// {
// ((Form1)item).Show();
// }
//}

}

注释部分,是要这种效果吗?
jin20000 2008-11-27
  • 打赏
  • 举报
回复
A窗体中this.hide,直接this.close就是了,


这个看的有点郁闷
yistudio 2008-11-27
  • 打赏
  • 举报
回复
参考一下
http://topic.csdn.net/u/20081120/20/88adbdd6-5459-4e06-bcba-d074fe2e5e3a.html
中我的回答
Old_Mouse 2008-11-27
  • 打赏
  • 举报
回复
弹出formA不需要写在button里,button里只实现Close。会自动调用formaclosing里的方法。不管点那个都能实现关闭B,显示A。

B窗体功能
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void FormB_FormClosing(object sender, FormClosingEventArgs e)
{
FormA formA = new FormA();
formA.Show();
}
sunny906 2008-11-27
  • 打赏
  • 举报
回复
button和formclosing的事件都实现相同的功能,即关闭B窗体,显示A窗体
Old_Mouse 2008-11-27
  • 打赏
  • 举报
回复
你是想这两种方法都能弹出一个formA是吧,那就直接写在formaclosing里,因为这个事件肯定会触发。button事件不一定会触发。
sunny906 2008-11-27
  • 打赏
  • 举报
回复
To falleaves:
如果formaclosing()不写的话,单出button,会关闭B窗体
这样的话,A窗体还是处于隐藏状态的
所以我认为formaclosing()还是应该有的
falleaves 2008-11-27
  • 打赏
  • 举报
回复
this.close();会出发fromclosing事件

因为窗体A是启动窗体,代码如下buttonclick:
formb fb=new formb();
fb.show();
this.close();

在窗体B上的button
forma fa=new forma();
fa.show();
this.close();

formaclosing()不用写
enihs 2008-11-27
  • 打赏
  • 举报
回复
button事件里面不要new 窗体并显示了,直接this.Close()就好了
sunny906 2008-11-27
  • 打赏
  • 举报
回复
不好意思,写错了
"就会弹出两个button"应该是"就会弹出两个Forma"
starj1 2008-11-27
  • 打赏
  • 举报
回复
理解正确。
窗体在正常关闭的时候会发出onformclosing和formclosed这些事件。
你的代码变成重复生成form a了
Old_Mouse 2008-11-27
  • 打赏
  • 举报
回复
是因为this.close(); 触发的formaclosing()
Chawind 2008-11-27
  • 打赏
  • 举报
回复
1楼正解
sunny906 2008-11-27
  • 打赏
  • 举报
回复
可能是我没有说清楚
我的意思是:
在窗体A上单击button,隐藏A,显示B
在窗体B上单击button,则关闭B,显示A
问题是,在B上的formclosing()中,加入关闭事件后,再单出button,就会弹出两个button
该如何解决?请高手指点
加载更多回复(2)

111,130

社区成员

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

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

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