窗体的单例模式

程序下载地址:

1.模式窗体与非模式窗体

  非模式窗体:创建的窗体与当前活动窗体没有建立任何关系,可以在新建窗体打开的情况下操作当前的活动窗体。

1 frmMain m =new frmmain();
2 m.Show();

  模式窗体:只有当新建的窗体关闭后,当前的活动窗体才能重新获得控制权。换句话说,如果不关闭新建窗体,则不能对原来的活动窗体进行任何操作。

1 frmMain m = new frmMain();
2 m.ShowDialog();

2.使用模式窗体与非模式窗体的直观感受

  非模式窗体:(注:在任务栏也会出现一堆标明窗体的图标)

  

  模式窗体:(注:窗体只能打开一次,并且子窗体打开的情况下不能操作父窗体)

  

3.如何使窗体只能打开一次,并且可以同时操作两个窗体

  如此便需要使用单例模式,原理是首先初始化一个静态的窗体。窗体显示时判断当前的窗体是否存在,存在则显示,否则新建。

代码如下:

  创建一个静态的窗体

1 static Form2 f2;
1    private void 显示子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
2    {
3        GetChild().Show();
4        child.Location = new Point(this.Location.X - 100, this.Location.Y + 50);
5    }

  窗体的单例模式:

1     private frmChild GetChild()
2     {
3         if (child == null || child.IsDisposed == true)
4         {
5             child = new frmChild();
6         }
7
8         return child;
9     }

  效果图:

时间: 2024-11-08 23:12:56

窗体的单例模式的相关文章

winform窗体对象 单例模式与泛型结合

实现弹出窗体对象的单例模式  结合泛型后,可以用于所有窗体的弹出操作 public class BaseFrm<T> where T : Form, new() { //定义一个静态的,私有的类型变量, private static T t; //程序运行时创建一个静态只读的进程辅助对象:因为要加锁时,实例有没有被创建出来,(有没有被创建过实例)还不知道. private static readonly object syncRoot = new object(); //将构造函数做成私有的,

20180522

Winform开发之ComboBox和ComboBoxEdit控件绑定key/value数据 https://www.cnblogs.com/Brambling/p/7114203.html C#基础知识-XML介绍及基本操作(十) https://www.cnblogs.com/leonliuyifan/p/7044438.html 归纳一下:C#线程同步的几种方法 https://www.cnblogs.com/michaelxu/archive/2008/09/20/1293716.htm

【C#】编程

窗体的单例模式 https://www.cnblogs.com/imstrive/p/5426503.html 使用XmlSerializer序列化可空属性 http://zz8ss5ww6.iteye.com/blog/1123842 VS强大插件-Reshaper使用有感 http://www.360doc.com/content/17/1104/03/1353678_700726432.shtml c# is和as的区别 http://www.cnblogs.com/ziling8163/

机房重构---MDI窗体+单例模式

在VB6.0版本的机房收费系统中就用到了MDI技术(多文档界面),其中有的窗体用了MDI,而有的则没有用到,回头想想这些个关于增删改查的功能都该是MDI这个容器中的子窗体,于是这次我将他们都放到了MDI窗体中. 一.关于MDI窗体 MDI窗体设置步骤: (1)在frmMain中打开属性窗格,"IsMdiContainer"属性设置为"True". (2)把工具箱中MenuStrip控件拖到frmMain中,创建菜单如图 由于最近敲的是"修改密码"

单例模式之窗体显示

      在机房重构时发现窗体的显示有问题,原因是窗体显示的个数没有限制,这样是不符合规范的,解决这个 问题可以用设计模式中的单例模式 一.信手沾来 在每个窗体中加入单例模式(其实就是一种方法) Private Shared m_instance As BasicData = Nothing Private Sub BasicData() '构造方法 End Sub Public Shared ReadOnly Property Instance() As BasicData Get If m

单例模式——解决MDI子窗体实例化的问题

机房收费系统进行有一段时间了,但是始终有些历史遗留问题.比如,如何MDI子窗体如何显示在上层的问题和MDI子窗体实例化的问题. 对于如何显示在上层的问题,这次采用的还是SetParent函数,在模块里面添加: <span style="font-size:18px;"><span style="font-size:18px;"> '定义一个用来设置子窗体的函数 Declare Function SetParent Lib "user

.NET设计模式之单例模式

说说我学习单例模式的原因 : 在做MDI WinForm程序的时候,需要每个子窗体只能打开一次(同时只能有一个子窗体实例),之前网上看到好多种解决方案,各种尝试都解决不了我遇到的问题,相信很多人跟我一样,现在可以告诉大家,单利模式可以完美解决. 单例模式总结: 目标:一个类只能有一个实例存在 类的实例通过自身来创建 由于类实例只能有一个,所以类的构造函数必须是private的 类内部必须有一个逻辑单元来返回给外部一个类实例(对象) 以下是实现过程: 我的MDI程序子窗体(用户管理--UserMg

asp.net中WinForm使用单例模式示例

例如在Windows应用程序中用下面代码打开一个窗体: 代码如下 复制代码 private void button1_Click(object sender, EventArgs e){ (new About()).Show();} 其结果是每点一次按钮都会打开一个窗体,最后可能是这样: 这显然这我不是我们想要的,正常应该是点击按钮时判断窗体有没有打开过,有打开过显示激活窗体,没有则创建并打开窗体,对代码稍做修改: 代码如下 复制代码 private void button1_Click(obj

Android应用程序窗体设计框架介绍

在Android系统中,一个Activity相应一个应用程序窗体.不论什么一个Activity的启动都是由AMS服务和应用程序进程相互配合来完毕的.AMS服务统一调度系统中全部进程的Activity启动,而每一个Activity的启动过程则由其所属进程来完毕.AMS服务通过realStartActivityLocked函数来通知应用程序进程启动某个Activity: frameworks\base\services\java\com\android\server\am\ ActivityStac