c#桌面应用程序--窗体重复创建问题
重复创建窗体问题的引出
连续单击添加窗体按钮,通过普通的在按钮事件方法中创建窗体,显示窗体的后果是,我们会发现,相同的窗体会重复不断的弹出。代码如下:
//添加窗口事件方法
private void tsmiAddStudent_Click(object sender, EventArgs e)
{
FrmAddStudent objFrmAddStudent = new FrmAddStudent();
objFrmAddStudent.Show();
}
问题分析:事件单击,会动态的创建窗体,每次单击,都会新建窗体并显示,不关闭,则一直显示存在。
解决办法:将创建的窗体设置为静态,使之在内存中唯一存在,每次单击都调用内存中存在的对象。
解决代码如下:
//显示添加窗口
public static FrmAddStudent objFrmAddStudent = null;//设置为全局变量,以便其他窗体可以调用
private void tsmiAddStudent_Click(object sender, EventArgs e)
{
if (objFrmAddStudent == null)//没有窗体对象
{
objFrmAddStudent = new FrmAddStudent(); //创建窗体对象,new实例化对象
objFrmAddStudent.Show();//显示窗体
}
else//窗体已经存在了
{
objFrmAddStudent.Activate();//激活窗体,只能在最小化的时候起作用
objFrmAddStudent.WindowState = FormWindowState.Normal;//设置窗体为正常大小状态
}
}
通过上述方法,调试运行确实解决了重复创建窗体的问题,但是当关闭窗体后,再次单击按钮,发现窗体不能显示,端点调试没有问题,问题在哪呢?
虽说窗体已经关闭,但因为对象是静态的,窗体关闭,程序没退出前,此窗体对象一直存在内存中,只是显示不出来。为此,需要在窗体关闭的时候,将静态窗体对象手动设置为空。对该窗体添加FormClosed事件:该窗体UI→属性→事件→找到FormClosed→双击添加事件并进入事件方法。
代码如下:
//窗体关闭完执行的事件
private void FrmAddStudent_FormClosed(object sender, FormClosedEventArgs e)
{
FrmMain.objFrmAddStudent = null;//objFrmAddStudent对象在主窗体中声明
}
注意对objFrmAddStudent对象为全局静态对象的理解。
c#桌面应用程序--窗体重复创建问题的更多相关文章
- Android应用程序窗体设计框架介绍
在Android系统中,一个Activity相应一个应用程序窗体.不论什么一个Activity的启动都是由AMS服务和应用程序进程相互配合来完毕的.AMS服务统一调度系统中全部进程的Activity启 ...
- WPF简介:VS创建桌面应用程序
1.简介 1/ 什么是WPF WPF,Windows Presentation Foundation也,译过来就是"Windows呈现基础",你看它的目的非常明确,就是用来把数据& ...
- C#入门---2、C#装备知识(C#创建桌面程序的时候创建的是什么应用程序)
C#入门---2.C#装备知识(C#创建桌面程序的时候创建的是什么应用程序) 一.总结 一句话总结: WPF应用程序:来替代 WindowsFroms 来创建桌面应用程序 1.什么是控制台程序 Con ...
- Android应用程序窗体View的创建过程
View类是android中非常重要的一个类.view是应用程序界面的直观体现,我们看到的应用程序界面就能够看作是View(视图)组成的. 那么我们应用程序的界面是怎么创建的呢,也就是应用程序的Vie ...
- Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开
Android 在安装完成界面,点击打开应用程序.在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开. etong_123的专栏 - 博客频道 - CSDN.NET htt ...
- nodejs+chromium 创建桌面应用程序
直接用nodejs+javascript+html+css也可以创建桌面应用程序啦,前端开发的同学应该都比较感兴趣. 生成的应用程序自带nodejs环境和chrome浏览器环境. github的ato ...
- Cocos2dx集成于windows桌面窗口程序的步骤
2D游戏需要做编辑器,而编辑器总是希望可以复用游戏中的逻辑来运行场景试看效果. 对于cocos2dx开发的程序,这个需求可以描述为: 实现一种方法,在桌面窗口程序中的某个控件上显示cocos2dx的场 ...
- VS生成桌面应用程序
1.简介 1/ 什么是WPF WPF,Windows Presentation Foundation也,译过来就是"Windows呈现基础",你看它的目的非常明确,就是用来把数据& ...
- Visual C++ Windows 桌面应用程序样例(摘抄)
//================================== //Windows应用程序框架结构(例子) //参考:<Visual C++宝典>陈国建等编著 //======= ...
随机推荐
- bzoj 1008: [HNOI2008]越狱 数学
1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description 监狱有连 ...
- Subnet Pools and Address Scopes
Why is IPAM important for Neutron? •No VM connectivity without a valid IP assigned •Duplicate subne ...
- PostgreSQL 与 MySQL 相比,优势何在?【转】
最近看到PostgreSQL话题比较多,就搜索了一下它与mysql的对比作者:知了链接:http://www.zhihu.com/question/20010554/answer/74037965来源 ...
- 前端框架之VUE
vue学习[第1篇]:vue之指令 vue学习[第2篇]:es6简单介绍 vue学习[第3篇]:vue之node.js的简单介绍 vue学习[第4篇]:vue 之webpack打包工具的使用 vue学 ...
- Mysql异常_01_ 誓死登进mysql_Can't connect to MySQL server on 'localhost' (10061)
现象:打开cmd,输入命令:mysql -uroot -p 回车之后,输入密码,结果进不去mysql,并且抛出异常 异常:Can't connect to MySQL server on 'local ...
- 利用Python进行文章特征提取(二)
本篇blog是利用Python进行文章特征提取的续篇,主要介绍构建带TF-IDF权重的文章特征向量. In [1]: # 带TF-IDF权重的扩展词库 # 在第一篇文档里 主要是利用词库模型简单判断单 ...
- 跨平台的WebRTC客户端框架:OpenWebRTC
Webrtc的ios框架编译 http://www.th7.cn/Program/IOS/201502/390418.shtml WebRTC in WebKit : http://www.webrt ...
- 霍夫变换Hough
http://blog.csdn.net/sudohello/article/details/51335237 霍夫变换Hough 霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法.它通 ...
- Windows Touch 便笺簿的
Windows Touch 便笺簿的 C# 示例 (MTScratchpadWMTouchCS) 本节介绍 Windows Touch 便笺簿的 C# 示例. Windows Touch 便笺簿的 ...
- HeartBleed bug
前两年的一个严重漏洞,影响很大.出现在openssl 1.0.1和1.0.2 beta(包含1.0.1f和1.0.2beta1).利用了TLS的heartbeat. 简单的说,该漏洞被归为缓冲过度读取 ...