当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-11-02

    本文导语:  Windows程序设计中的MDI(Multiple Document Interface)官方解释就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MD...

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#编程之设置DataGrid控件的标题栏
  • C#生成设置范围内的Double类型随机数的方法
  • C#设置子窗体在主窗体中居中显示解决方案
  • C#反射技术(读取和设置类的属性)的例子
  • webBrowser代理设置c#代码
  • C# TreeView控件实例代码(重新设置TreeView、删除节点、右键选中等)
  • C#代码设置开机启动示例
  • C#自动设置IE代理服务器(翻墙软件)代码实现
  • C#(WinForm) ComboBox和ListBox添加项及设置默认选择项
  • C#设置本地网络如DNS、网关、子网掩码、IP等等
  • C# web api返回类型设置为json的两种方法
  • mozilla 窗体上的字体在那设置.
  • 我提一个弱智问题:用JB6写程序,在窗体上加按钮和其他控件,如何自行设置他们地位置?
  • Gtk下(linux)如何设置窗体的背景图片?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 不知道设置了什么,startx只能进到xterm,怎样才能设置进KDE?
  • 虚拟机2003只能自动获取ip上网,不能设置ip,怎么办
  • 我使用校园网的代理服务,但只能上 internet,却访问不了本校主页,那里设置不对
  • 我的tomcat只能同时支持10个用户连接,如果多了tomcat就停止服务,请问如何设置啊??
  • 请问怎么把result_entry=gtk_entry_new()设置为只能显示,不能输入?
  • 我的在VMware Workstation上安装了LIUNX后,只能在那个虚拟机上用额,怎么样设置成在重启电脑的时候可以选择用哪个系统啊啊,我想用双系统的,求帮
  • 如何设置TextField或JTextField,使其只能输入规定个数的字符?
  • 关于sniffer的,在网上找到一个很经典的例子,但是只能接受本机的,数据包,为什么?已经设置成杂乱模式了
  • Java 程序是不是只能在jdk的bin目录下编译??在其他目录编译的时候会报错,不知怎样设置,请大虾指教!
  • C++ Bitsets 成员 count():返回被设置的位的个数
  • 在使用gcc之前,需要先设置环境吗?如何设置?在线等!!!
  • C++ I/O 成员 precision():设置精度
  • 用grub能否设置启动密码?如何设置?
  • C++ Bitsets 成员 any():如果有任何一个位被设置就返回true
  • 在linux服务器上面设置squid后怎么设置可以使客户端能使用QQ?
  • C++ Double Ended Queues(双向队列) 成员 assign():设置双向队列的值
  • 请问设置一个和root权限差不多的用户怎么设置?
  • C++ Vectors 成员 reserve():设置Vector最小的元素容纳数量
  • 用JSP。XML开发网站。请问那种环境设置最好。该如何设置环境
  • C++ Bitsets 成员 set():设置位
  • 环境变量设置设置与显示不一致
  • C++ Bitsets 成员 none():如果没有位被设置则返回true
  • linux下到底如何设置环境变量?在哪设置?详细具体点
  • C++ Strings(字符串) 成员 resize():重新设置字符串的大小
  • 紧急求救各位了:linux下有没有有设置报文最小长度的命令(好像只有设置报文最大长度MTU,通过ifconfig)?
  • Windows7自带防火墙设置:启动,关闭及高级设置
  • 怎么设置在Linux上面设置WEB服务器?请各位高手指教!!!
  • C++ Strings(字符串) 成员 reserve():保留一定容量以容纳字符串(设置capacity值)
  • linux中端口号设置是在哪个配置文件,该如何设置?
  • C++ I/O 成员 setf():设置格式标志
  • 100求救 jrun3.0 里的beans的设置,你登陆我的机器设置


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3