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#实现自定义windows系统日志的方法

    C#实现自定义windows系统日志的方法

    这篇文章主要介绍了C#实现自定义windows系统日志的方法,涉及C#针对windows系统日志的创建、读写及删除技巧,非常具有实用价值,需要的朋友可以参考下
    2015-08-08
  • c# 实现简单的串口通讯

    c# 实现简单的串口通讯

    这篇文章主要介绍了c# 如何实现简单的串口通讯,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#配置文件操作类分享

    C#配置文件操作类分享

    这篇文章主要分享了C#配置文件操作类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • C# winfrom 模拟ftp文件管理实现代码

    C# winfrom 模拟ftp文件管理实现代码

    从网上找到的非常好用的模拟ftp管理代码,整理了一下,希望对需要的人有帮助
    2014-01-01
  • C#实现功能强大的中国农历日历操作类

    C#实现功能强大的中国农历日历操作类

    这篇文章主要介绍了C#实现功能强大的中国农历日历操作类,实例分析了C#操作时间及字符串的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • C#中时间类的使用方法详解

    C#中时间类的使用方法详解

    这篇文章主要介绍C#中的时间类,文中主要介绍了DateTime类,TimeSpan类,DateTimeOffset类及静态类的封装,通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 关于C#中的Invoke示例详解

    关于C#中的Invoke示例详解

    一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解,下面这篇文章主要给大家介绍了关于C#中Invoke的相关资料,需要的朋友可以参考下
    2023-02-02
  • DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)

    DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)

    这篇文章主要介绍了DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)的解决办法
    2015-09-09
  • c# 剔除sql语句''尾巴''的五种方法

    c# 剔除sql语句''尾巴''的五种方法

    这篇文章主要介绍了c# 剔除sql语句'尾巴'的五种方法,
    2020-11-11
  • C#调用C动态链接库的实现

    C#调用C动态链接库的实现

    动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,本文主要介绍了C#调用C动态链接库的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论