WinForm MDI里打开一个子窗口然后最大化,再打开其他子窗口也变成最大化打开了,如何能按默认大小打开?

解决方案 »

  1.   

    private bool checkChildFrmExist(string childFrmName)
            {
                foreach(Form childFrm in MdiChildren)
                {
                    if (childFrm.Name ==childFrmName )
                    {
                        if (childFrm.WindowState==FormWindowState.Minimized)
                            childFrm.WindowState = FormWindowState.Normal;
                        //childFrm.WindowState = FormWindowState.Maximized;
                        childFrm.Activate();
                        return true;
                    }
                }
                return false;
            }
      

  2.   

    最简单的办法就是在窗体的.Show()之后,再加一句childFrm.WindowState = FormWindowState.Normal;
      

  3.   

    谢谢各位,还有点问题。如果我是以反射的方式创建的新窗口呢?
    OpenWindow(typeof(FormTest).ToString(), "测试窗体");如何控制这个FormTest按默认大小显示呢?
    #region 反射方法来处理每个子窗体只保留一个实例
    /************************************************************ 
    * 调用方法,打开一个MDI子窗口
    * OpenWindow(typeof(子窗口).ToString(), string(子窗口标题), Form(this)父窗口句柄);  
    /*************************************************************/
    private void OpenWindow(string ChildTypeString, string FormText, Form Handle)
    {
    Form myChild = null;
    if (!ContainMDIChild(ChildTypeString))
    {
    // 获取当前进程的集合
    Assembly assembly = Assembly.GetExecutingAssembly();
    // 创建数据类型使用类型字符串
    Type typForm = assembly.GetType(ChildTypeString);
    // 创建对象使用类型的"InvokeMember"方法
    Object obj = typForm.InvokeMember(
    null,
    BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance,
    null,
    null,
    new Object[] { Handle });
    // 显示子窗口
    if (obj != null)
    {
    myChild = obj as Form;
    myChild.MdiParent = this;
    myChild.StartPosition = FormStartPosition.CenterScreen;
    myChild.Text = FormText;
    myChild.Show();
    myChild.Focus();
    }
    }
    }
    #endregion