C# new file需要关闭吗new 的多个窗口

VS&C#中关闭一个窗口、打开另外一个窗口的方法和注意事项
在VS中使用c#开发winform应用程序,经常需要关闭一个窗口的同时开启另外一个窗口,如何实现?
实现方法如下:
假定有一个窗口Form1 和
Form2,希望在Form1关闭的同时显示Form2。或者在点按Form1中的某个按钮button1时关闭Form1,
并显示Form2.
在button的click事件中,或者在form的formclosed事件可用如下代码:
& private void Form1_FormClosed(object sender,
FormClosedEventArgs e)
& & & Form2 frm2
= new Form2();
frm2.Show();
//Application.Run(new Form2()); &
& private void button1_Click(object sender,
EventArgs e)
this.Close();
& & & Form2 frm2
= new Form2();
frm2.Show();
&//Application.Run(new
Form2());&
需要注意的是,不能使用application.run方法来做,这个时候会启动另外一个线程(我的理解),会报错。
与此同时还要注意,光有上面的代码不够,还要修改program.cs文件。如果不修改,则上面的语句并不起作用,上面的并不显示form2.
在Program.cs的Main方法中,修改成如下代码:
//Application.Run(new Form1());
& & & Form1 frm1
= new Form1();
frm1.Show();
Application.Run(); & //这里开启单个线程,开启一个消息循环
也就是必须将原来的Application.Run(new
Form1())改成上面的代码。这样才可以正常显示。
之所以出现只能关闭form1,不能显示form2的情况,症结在application.run()上。
根据MSDN的解释:
在没有窗体的情况下,在当前线程上开始运行标准应用程序消息循环。
在当前线程上开始运行标准应用程序消息循环,并使指定窗体可见。
可以看到,两个方法的情况是有区别的。我理解就是在单个线程上开始了一个新的消息循环,这是不被允许的。所以不要使用application.run()方法来使得窗口可见。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
winform中关键就在ShowDialog()
阅读(7053)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_081068',
blogTitle:'c# 关闭子窗口刷新父窗口',
blogAbstract:'webform\r\n使用javascript刷新。代码:\r\n&&script&window.alert(\'修改成功\');window.opener.location.href = window.opener.location.if (window.opener.progressWindow)window.opener.progressWindow.close();window.close();&/script&\r\nwinform\r\n&\r\n',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}c#如何实现关闭当前窗体并打开另一个已经创建的窗体。_百度知道
c#如何实现关闭当前窗体并打开另一个已经创建的窗体。
我有更好的答案
不能关的,你正在启动的这个窗体已经是主线程了,如果你把它关了,你就等于是把主线程关了,其他的画面就算是起来了,你也看不到,马上就被关闭了。如果你想要做到你说的效果,那就只能这么做:Form2 form2 = new Form2();form2.ShowDialog(this);//这里一定要用ShowDialog,否则画面程序依旧会结束。this.Close();//关闭Form2后,程序退出然后在Form2的Load事件里写上:this.Owner.Hide();//隐藏Form1只有这么做,才能达到你的目的。
采纳率:51%
来自团队:
其实可以试着把当前窗体隐藏掉,然后打开已经创建的窗体。如果非得要关闭的话,用线程打开新窗体。
this.Close();Form2 fm=new Form2();fm.Show();
这不是我想要的,你的回答百度上已经有了,我也已经试过了,行不通。
关闭窗体 打开新窗体 不就是这样的么 你啥问题
form2为第二个窗体。在第一个窗体里写。 Form2 f=new Form2 ();
f.ShowDialog();
this.Close();
2条折叠回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C#在一个窗体中关闭另一个窗体_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#在一个窗体中关闭另一个窗体
&&通过窗体A的按钮关闭窗体B
你可能喜欢C#实现关闭子窗口而不释放子窗口对象的方法
转载 &发布时间:日 10:07:58 & 投稿:jingxian
下面小编就为大家带来一篇C#实现关闭子窗口而不释放子窗口对象的方法 。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在线扫描相机的调试过程中,需要开辟调试界面来进行位置的配置。调试结束后,一种常用的方式是将调试参数保存并在下次启动时加载。另一种简单方式是直接使用该参数运行程序。因此,在后一种情况下,需要实现的功能是:即使关闭调试窗口,其窗口对象也不释放。除非其主窗口关闭,才销毁其调试窗口的对象。
1 在主窗口中实例化子窗口
在主窗口中实例化子窗口,而不是在按钮中实例化子窗口对象。
Form2 f2 = new Form2();
2 通过按钮来显示主窗口
在按钮中需要实现的是窗口的显示
private void Config_Click(object sender, EventArgs e)
f2.Show();
3 关闭子窗口而不释放子窗口对象的方法
经查询和实证,修改子窗口中Dispose的方法是可行的。更改如下:
protected override void Dispose(bool disposing)
//if (disposing && (components != null))
components.Dispose();
//base.Dispose(disposing);
4 在父窗口关闭时销毁子窗口对象
由于需要在父窗口关闭是销毁子窗口对象,因此,在父窗口的关闭动作FormClosed中添加调用子窗口f2的销毁函数。
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
f2.Close();
子窗口类中添加的关闭函数如下:
public void Close()
this.Dispose();
以上这篇C#实现关闭子窗口而不释放子窗口对象的方法 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 c new的用法 的文章

 

随机推荐