.NET实现父窗体关闭而不影响子窗体的方法
一般而言,在传统的VB6中父子窗体(诸如“闪屏”窗体是“父窗体”加载内容,然后启动自动关闭,启动主窗体,是子窗体)的交互中,我们只需按照这样的逻辑“按部照搬”地书写即可(假设“闪屏”窗体设置为启动窗体):
SplashScreen.Close() MainForm.Show()
但是在VB.NET或者C#中却不能这样写。因为这样写的结果是闪屏窗体“一闪而过”,接着啥也不会出现了。
究其原因,是因为NET中一切都是“类”——闪屏窗体是一个类,这个类内部的某个事件内部引用了“主窗体”这个类,并且把它创造出来。现在你突然间关闭了“闪屏”窗体,意味着创建这个“主窗体”的UI线程被终止,自然属于这个类内部的所有其它引用类也就成了“无米之炊”——皮之不存,毛怎焉附?因此两个窗体“一先一后”被关闭了。
解决此类问题的方法在于分离两个窗体的创建线程——不让主窗体通过闪屏窗体UI进行创建。干脆创建一个前台Thread(不能把IsBackGround设置为true,因为这样会随着闪屏窗体关闭而自行关闭!),然后在Thread内部的委托中使用Application.Run(new 一个窗体实例))。
至于VB.NET中,除了可以用以上方法,还可以直接右键项目,做如下设置:
“关闭模式”是指代用何种方式关闭全部的程序(窗体)。默认“当启动窗体关闭”时(意味着哪个窗体是启动窗体,它关闭了,其余窗体都跟着自动关闭)。当然您也可以选择“最后一个窗体关闭时”,这就意味着只有最后的窗体关闭的时候才是全部窗体关闭。因此应该选这项。
相关推荐
-
ASP.NET 窗体间传值的方法
假设ParentForm.aspx 页面上有TextBox1文本框和Open按钮点击Open按钮弹出SubForm.aspx,SubForm.aspx页面上有TextBox1文本框和Close按钮点击Close按钮关闭SubForm.aspx页面,并把子页面SubForm.aspx文本框的值显示到父页面ParentForm.aspx 的文本框上.父窗体前台代码: 复制代码 代码如下: <script type="text/javascript"> functi
-
asp.net下模态对话框关闭之后继续执行服务器端代码的问题
最近做一个从Access项目向 Asp.net + SqlServer迁移工作,其中遇到了这种情况,在Access窗体的一个按钮事件中,代码大体上是这么个功能:弹出模态对话框,在关闭对话框之后继续走一段数据库操作代码. 在Asp.net里弹出模态对话框容易,但是在模态对话框关闭之后还要继续执行服务器代码,这就要求当对话框关闭之后页面要立即提交.于是有了以下的解决方法. 在Web Form中拖入服务器端按钮,并假设此按钮ID为 btnComput,在隐藏页面的 Page_Load 中用代码中这样写
-
asp.net后台关闭当前页面并传值的两种方法
第一种: 复制代码 代码如下: Response.Write("<script>window.close();</script>");// 会弹出对话框询问是否关闭 第二种: 复制代码 代码如下: Response.Write("<script>window.opener=null;window.close();</script>");// 不会弹出询问 传值给父页面: 复制代码 代码如下: stri
-
asp.net子窗体与父窗体交互实战分享
今天在项目上遇到了这个问题,其实只是window.returnValue的简单应用,不是asp.net的专属内容.作为积累,记录一个简单的实现模型. 图1 用到的文件 从图1中我们可以看到,只用到了两个页面,其中Default.aspx作为父页面,Default2.aspx作为子页面被弹出.Default.aspx页面上有两个TextBox一个Button,代码如下: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="
-
asp.net Silverlight中的模式窗体
其实在Silverlight中开发模式窗体并不难,比在Html里面用div来构造容易多了,但是要做到具有重用性和规范性还是要下一点工夫的.如果SL的开发朋友们想偷一点懒,直接用些现成写好的模式窗体代码的话,我在这里介绍一个SL的框架,叫SilverlightFX,里面就有一个Form类,只要你的xaml类继承了Form类就可以很方便地使用模式窗体了.具体方面可以参照他的sample工程,这里给出SilverlightFX的连接给大家 http://projects.nikhilk.net/Sil
-
asp.net窗体操作总结
1.打开新窗口 这个简单:response.write("<script language='javascript'>window.open('url');</script>"); 2.调整本窗口大小和位置 response.write("<script>window.resizeto(500,400);</script>"); response.write("<script>window.mov
-
在.NET中利用委托实现窗体间通信
对于窗体间简单的通信,采用VB6.0的方法就能满足我们的要求,但在一些架构设计复杂的应用中,这种方法就显得有点捉襟见肘了,同时该方法还有一个缺点,就是它仅仅对通过.NET窗体向导添加进去的窗体起作用,而对于自定义的窗体类型我们是无法添加到Forms对象集合中的.而且也和其它诸如构造函数传参等方法一样,会在窗体间大量互相引用各自的成员,造成了彼此之间存在着很大的耦合性,非常不利于窗体模块间的独立,这不符合良好软件设计模式的思想. 如果我们想在一个窗体中访问另一个窗体中自定义的成员,必须把该成员的可
-
asp.net窗体的打开和关闭(输出js)
复制代码 代码如下: //打开新的窗体 Response.Redirect("WebMain.aspx"); //弹出一个新窗体 Response.Write("<script>window.open(\"WebMain.aspx\")</script>") //弹出一个只有确定按钮的提示框 Response.Write("<script>alert(\"用户名或密码错误\");&
-
.NET中利用js让子窗体向父页面传值的实现方法
子页面C#后台代码: 复制代码 代码如下: /// <summary> /// 将设置好的值赋给父页面 /// </summary> /// <param name="count">需要传递的值</param> void SetValueToParentPage(int count, string strPersons) { StringBuilder
-
ASP.NET打开新页面而不关闭原来的页面 实例代码
复制代码 代码如下: Respose.Write("<script language='javascript'>window.open('"+ url +"');</script>"); (打开简洁窗口):Respose.Write("<script language='javascript'>window.open('" + url + &quo
随机推荐
- 记一次MongoDB性能问题(从MySQL迁移到MongoDB)
- jQuery仿淘宝网产品品牌隐藏与显示效果
- 详解vue中使用express+fetch获取本地json文件
- MySQL中关于临时表的一些基本使用方法
- Asp.net 中使用GridView控件实现Checkbox单选
- 全系IE支持Bootstrap的解决方法
- php smarty的预保留变量总结
- 基于scrapy实现的简单蜘蛛采集程序
- Jsp自定义标签和方法详解
- 深入理解C语言 static、extern与指针函数
- Kindeditor在线文本编辑器如何过滤HTML
- 利用js 进行输入框自动匹配字符的小例子
- 浅谈Nodejs观察者模式
- 2014年放假安排时间表 2014年元旦放假安排
- jquery图片播放浏览插件prettyPhoto使用详解
- python使用reportlab实现图片转换成pdf的方法
- JQuery获取与设置HTML元素的内容或文本的实现代码
- jQuery UI仿淘宝搜索下拉列表功能
- ubuntu安装mysql pycharm sublime
- 对python 矩阵转置transpose的实例讲解