怎以关闭从form1窗体中打开form2窗体?

zqiang21cn 2006-11-30 09:03:34
private void button1_Click(objectsender,System.EventArgs e)
{
Form2 f2=new Form2();
f2.Show();
}
private void button2_Click(objectsender,System.EventArgs e)
{
Form2 f2=new Form2();
f2.Close();
}
//点击button2,怎么关不掉button1打开的form2?
我是初学者,请各位指教,谢谢!
...全文
555 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
test33 2006-12-01
  • 打赏
  • 举报
回复
引用`
flyforlove 2006-12-01
  • 打赏
  • 举报
回复
zuo_hy(长河精工) ( ) 信誉:100 Blog 2006-12-01 11:52:03 得分: 0


private Form2 frm;
private void button1_Click(object sender, EventArgs e)
{
frm = new Form2();
frm.Show();
}

private void button2_Click(object sender, EventArgs e)
{
if (frm != null)
{
frm.Close();
}
}
------------------------------------------
支持。。。。LZ看看。


------------------------------


支持个头呀,这段代码明显是错的。frm不等于空,不代表内部资源没有释放。
弘毅致远 2006-12-01
  • 打赏
  • 举报
回复
private Form2 frm;
private void button1_Click(object sender, EventArgs e)
{
frm = new Form2();
frm.Show();
}

private void button2_Click(object sender, EventArgs e)
{
if (frm != null)
{
frm.Close();
}
}
------------------------------------------
支持。。。。LZ看看。
小y的CSDN博客 2006-12-01
  • 打赏
  • 举报
回复
Form2 f2=new Form2();
private void button1_Click(objectsender,System.EventArgs e)
{

f2.Show();
}
private void button2_Click(objectsender,System.EventArgs e)
{

f2.Close();
}
flyforlove 2006-12-01
  • 打赏
  • 举报
回复
先clear一下你的问题,点击button1的话,是只能打开一个窗体?还是可以打开多个窗体?
如果只可以打开一个窗体的话,这涉及到单实例的问题,可以用singleton模式实现。

如果是可以打开多个窗体的话,要对窗体进行管理了,你可以用container来管理

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
IContainer container;
public Form1()
{
InitializeComponent();
container = new Container();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
container.Add(form2);
form2.Show();
}

private void button2_Click(object sender, EventArgs e)
{
container.Dispose();
}
}
}
dyw31415926 2006-12-01
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Name = "frm";//此处要设置一个Name属性,否则name属性为""
frm.Owner = this;
frm.Show();

}

private void button2_Click(object sender, EventArgs e)
{
foreach (Form frm in this.OwnedForms)
{
if (frm.Name == "frm")
{
frm.Close();
}
}

}
zerohk 2006-12-01
  • 打赏
  • 举报
回复
很难解决
flyforlove 2006-12-01
  • 打赏
  • 举报
回复
maoliner(控制面板) ( ) 信誉:100 Blog 2006-12-01 13:28:55 得分: 0


TNND,怎么没人支持我这个呢,单件模式。弹出N个窗体的需求,除非你有病玩大家
Form1:
private void button1_Click(object sender, System.EventArgs e)
{
Form2.InstanceForm = new Form2();
Form2.InstanceForm.Show();
}

private void button2_Click(object sender, System.EventArgs e)
{
if (Form2.InstanceForm != null)
{
Form2.InstanceForm.Close();
}
}

Form2:
public class Form2 : System.Windows.Forms.Form
{
public static Form2 InstanceForm = null;


-----------------------------------------------------------

程序不对,还要人看,你这不是误导人家么,

你先点击button1打开一个窗口,然后点击右上方的x关闭按钮关闭,然后再点击一下button2,把报错的msg给大家看看吧。
maoliner 2006-12-01
  • 打赏
  • 举报
回复
TNND,怎么没人支持我这个呢,单件模式。弹出N个窗体的需求,除非你有病玩大家
Form1:
private void button1_Click(object sender, System.EventArgs e)
{
Form2.InstanceForm = new Form2();
Form2.InstanceForm.Show();
}

private void button2_Click(object sender, System.EventArgs e)
{
if (Form2.InstanceForm != null)
{
Form2.InstanceForm.Close();
}
}

Form2:
public class Form2 : System.Windows.Forms.Form
{
public static Form2 InstanceForm = null;
cpitandy 2006-12-01
  • 打赏
  • 举报
回复
补充一下 如果点了Button2(关闭2窗体)后,在点Button1的话就回出错误,因为你没有释放内存!
不过估计你也不回用着个
呵呵
cpitandy 2006-12-01
  • 打赏
  • 举报
回复
private Form2 f2=new Form2();//把Form2的实力化定义成一个常量
private void button1_Click(object sender, System.EventArgs e)
{
f2.Show();
}
//Button1实现的是打开2窗体
private void button2_Click(object sender, System.EventArgs e)
{
f2.Close();
}
//Button2实现的是关闭2窗体
//着是在Form1中的代码
兔子-顾问 2006-12-01
  • 打赏
  • 举报
回复
http://blog.csdn.net/wuyazhe/archive/2006/11/23/1406795.aspx
兔子-顾问 2006-12-01
  • 打赏
  • 举报
回复
我的blog有介绍。应该是非常的合理的。
liujia_0421 2006-11-30
  • 打赏
  • 举报
回复
TO:如果要关闭所有form2,请问怎么实现?!!!

如果这样的话,那楼上的方法可以...
绿色夹克衫 2006-11-30
  • 打赏
  • 举报
回复
关掉所有的也可以用上面的方法

foreach( Form frm in this.OwnedForms )
{
if( frm is Form2 )
frm.Close();
}
绿色夹克衫 2006-11-30
  • 打赏
  • 举报
回复
既然要打开很多个,那就需要一定的管理,在打开Form2时,最好将Form2设置为Form1的子Form,

Form2 frm = new Form2();
frm.Owner = this;

这样可以遍历所有打开的Form2,并根据Form2的Name属性,决定关闭哪一个。

foreach(Form frm in this.OwnedForms)
{
if(frm.Name = "XXXXX")
{
frm.Close();
}
}
zqiang21cn 2006-11-30
  • 打赏
  • 举报
回复
To liujia:
如果要关闭所有form2,请问怎么实现?!!!
zqiang21cn 2006-11-30
  • 打赏
  • 举报
回复
是的,thanks !
liujia_0421 2006-11-30
  • 打赏
  • 举报
回复
你的意思是允许弹出多个Form2,但在点击关闭时,必须把所有的Form2都关闭,是这样吗?
zqiang21cn 2006-11-30
  • 打赏
  • 举报
回复
To liujia:
我只是想把点击button1打开的form2通过点击button2来关闭,你上面的方很好!
但是如果我连续打开两个form2, 再点button2时,只能关闭最后打开的form2,之前的form2关不掉!
加载更多回复(16)

110,536

社区成员

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

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

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