zoukankan      html  css  js  c++  java
  • 如何在C#的MDI窗体中同样的子窗体只显示一次

    /// <summary>
    /// 打开窗体
    /// </summary>
    /// <param name="mdiChildTypeString"></param>
    /// <returns></returns>     private void ShowWindow(string mdiChildTypeString)
    {

         Form currentMdiChild
    = null;

        
    if (!IsMDIChildFormExist(mdiChildTypeString))
         {
             Assembly assembly
    = Assembly.GetExecutingAssembly();
             Type typForm
    = assembly.GetType(mdiChildTypeString);

            
    //关于InvokeMember用法,不明白的可以查看:http://msdn.microsoft.com/zh-cn/library/de3dhzwy(VS.80).aspx
             Object mdiChild = typForm.InvokeMember(
                
    null,
                 BindingFlags.DeclaredOnly
    | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance,
                
    null,
                
    null,
                
    null);

            
    if (mdiChild != null)
             {
                 currentMdiChild
    = mdiChild as Form;
                 currentMdiChild.MdiParent
    = this;
                 currentMdiChild.WindowState
    = FormWindowState.Maximized;
                 currentMdiChild.Show();
                 currentMdiChild.Focus();
             }

         }

    }

    /// <summary>
    /// 检查MDI子窗体是否存在
    /// </summary>
    /// <param name="mdiChildTypeString"></param>
    /// <returns></returns>        
    private bool IsMDIChildFormExist(string mdiChildTypeString)
    {
         Form currentMDIChild
    = null;
        
    foreach (Form mdiChildFrm in this.MdiChildren)
         {
            
    if (mdiChildFrm.GetType().ToString() == mdiChildTypeString)
             {
                 currentMDIChild
    = mdiChildFrm;
                
    break;
             }
         }

        
    if (currentMDIChild != null)
         {
            
    if (currentMDIChild.WindowState == FormWindowState.Minimized)
             {
                 currentMDIChild.WindowState
    = FormWindowState.Normal;
             }
             currentMDIChild.TopMost
    = true;
             currentMDIChild.Activate();
             currentMDIChild.Focus();
            
    return true;
         }
        
    else
         {
            
    return false;
         }

    }

    //调用方法如下

     private void toolStripButton1_Click(object sender, EventArgs e)
            {
                ShowWindow(typeof(Form1).ToString());          
               
            }

    private void toolStripButton2_Click(object sender, EventArgs e)
            {
                ShowWindow(typeof(Form2).ToString());  
            }

  • 相关阅读:
    Python处理海量手机号码
    javascript面向对象
    NET实现的DDD、CQRS与微服务架构
    增加打赏功能
    开发测试时给 Kafka 发消息的 UI 发送器――Mikasa
    Computational Network Toolkit (CNTK) 是微软出品的开源深度学习工具包
    线程同步和多线程优先级
    linux sed命令详解(转)
    linux sort,uniq,cut,wc命令详解 (转)
    linux awk命令详解(转)
  • 原文地址:https://www.cnblogs.com/jerrychenfly/p/1879695.html
Copyright © 2011-2022 走看看