C#设置MDI子窗体只能弹出一个的方法

 更新时间:2014年08月19日 08:51:08   投稿:shichen2014  
这篇文章主要介绍了C#设置MDI子窗体只能弹出一个的方法,很实用的技巧,需要的朋友可以参考下

Windows程序设计中的MDI(Multiple Document Interface)官方解释就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序。

新建一个WindowForm程序。得到一个窗体作为我们父窗体Parent。拖入一个menustrip空间。在新建一个窗体FrmChildren作为我们子窗体,界面如下图所示:

其代码如下所示:

public Form1()
{
  InitializeComponent();
  //将Form1设置为MDI窗体,当然在Form1的IsMdiContainer属性页可以设置
  this.IsMdiContainer = true;
}

在menustrip打开子窗体的事件代码如下:

private void tsmiOpenWindow_Click(object sender, EventArgs e)
{  
  FrmChildren child = FrmChildren.GetWindow();//调用方法
  child.MdiParent = this;//设置child的父窗体为当前窗体
  child.Show();
  
}

GetWindow()这个方法在哪里呢。当然是在FrmChildren子窗体里面写

 public partial class FrmChildren : Form
  {
    private FrmChildren() //由 public FrmChildren改为 private FrmChildren
    {
      InitializeComponent();
    }
    static FrmChildren fc = null; 创建一个静态对象
    public static FrmChildren GetWindow()
    {  //当子窗体没有开启或者已经释放。就可以创建新窗体
      if (fc==null||fc.IsDisposed)
      {
        fc = new FrmChildren();
      }
      return fc;
    }
  }

第二种方法:

这种方法个人觉得很简单。直接在在menustrip打开子窗体的事件下面写就ok了

private void tsmiOpenWindow_Click(object sender, EventArgs e)
{ 

#region 方法二Application收集打开的窗体,用索引器来寻找,就是窗体的Name属性
//方法二.如果没有Name为FrmChildren的子船体,实例化创建。和之前的正规做法没有什么差别,只是多了判断。
if (Application.OpenForms["FrmChildren"] == null)
{
FrmChildren child = new FrmChildren();
child.MdiParent = this;
child.Show();
}
else//有Name为FrmChildren的子船体,就直接show()
{
Application.OpenForms["FrmChildren"].Show();
}
#endregion
}

感兴趣的朋友可以调试运行一下本文所述示例,相信会有不小的收获。

相关文章

  • C#事件管理器如何清空所有监听详解

    C#事件管理器如何清空所有监听详解

    这篇文章主要给大家介绍了关于C#事件管理器如何清空所有监听的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • C#中关于可空类型的小知识

    C#中关于可空类型的小知识

    这篇文章主要介绍了C#中关于可空类型的小知识,本文讲解可空类型运算的小技巧,需要的朋友可以参考下
    2015-04-04
  • C#排序算法之堆排序

    C#排序算法之堆排序

    这篇文章主要为大家详细介绍了C#排序算法之堆排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • C#实现二叉排序树代码实例

    C#实现二叉排序树代码实例

    今天小编就为大家分享一篇关于C#实现二叉排序树代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • C# 使用PictureBox实现图片按钮控件的示例步骤

    C# 使用PictureBox实现图片按钮控件的示例步骤

    这篇文章主要介绍了C# 使用PictureBox实现图片按钮控件的示例步骤,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • c# Base关键字的使用

    c# Base关键字的使用

    c# Base关键字的使用示例代码,大家可以参考下用法。
    2009-07-07
  • Unity Blend Tree动画混合树使用入门教程

    Unity Blend Tree动画混合树使用入门教程

    这篇文章主要为大家详细介绍了Unity Blend Tree动画混合树使用入门教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Unity实现微信聊天框界面

    Unity实现微信聊天框界面

    这篇文章主要为大家详细介绍了Unity实现微信聊天框界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C# ArrayList、HashSet、HashTable、List、Dictionary的区别详解

    C# ArrayList、HashSet、HashTable、List、Dictionary的区别详解

    这篇文章主要介绍了C# ArrayList、HashSet、HashTable、List、Dictionary的区别的相关知识点内容,有需要朋友们参考下。
    2019-08-08
  • C# .NET实现扫描识别图片中的文字

    C# .NET实现扫描识别图片中的文字

    本文以C#及VB.NET代码为例,介绍如何扫描并读取图片中的文字。文中的示例代码介绍详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2021-12-12

最新评论