当前位置:   article > 正文

Winform技巧1:通过窗口类名称+反射打开窗口

Winform技巧1:通过窗口类名称+反射打开窗口

缘起

在开发Winform时,Mdi有很多子窗口,当然有不同的子窗口类名,比如FrmWin1,FrmWin2, FrmWin3 , 因为打开这些窗口时需要有一些判断,具体如下:
1)判断FrmWin1是否打开了,如果没有打开,就打开FrmWin1,否则激活FrmWin1,防止重复打开FrmWin1。
2)因为FrmWin类比较多,每次都是new,这样觉得不方便,并且代码量较多,原来就尝试用“FrmWin类名+反射”来打开窗口,完成项目后,就忘记了。
这次准备做个小程序,就有捡起来,记录下以便后面不再遗忘。
OK,下面直接源码了。

源码

ControlHelper.cs类

 /// <summary>
        /// 判断子窗体是否打开
        /// </summary>
        /// <param name="formName"></param>
        /// <returns></returns>
        public static bool MdiChildWinIsOpened(this Form parentFrm, string frmName)
        {
            bool isOpen = false;

            //判断父窗口IsMdiContainer是否true,否则设置true
            if (!parentFrm.IsMdiContainer) parentFrm.IsMdiContainer = true;

            foreach (Form childrenForm in parentFrm.MdiChildren)
            {
                // 检测是不是当前子窗口名称
                if (childrenForm.Name == frmName)
                {
                    // 是,显示
                    childrenForm.Visible = true;
                    // 激活
                    childrenForm.Activate();
                    //childrenForm.WindowState = FormWindowState.Maximized;
                    isOpen = true;
                }
            }
            return isOpen;
        }

        /// <summary>
        /// 根据窗口名称打开Mdi子窗口
        /// </summary>
        /// <param name="parentFrm">父窗口,默认this</param>
        /// <param name="frmClassFullName">Form类的全名称:命名空间名.类名   </param>
        /// <param name="assembly">程序集</param>
        public static void MdiChildWinOpen(this Form parentFrm,  string frmName, Assembly assembly)
        {

            // 判断子窗体是否打开, 如果没有打开
            if (MdiChildWinIsOpened(parentFrm, frmName) == false )
            {
                //Assembly assembly = Assembly.GetExecutingAssembly();

                // 拼接成class的全名称:命名空间名.类名
                // 通过,分割,取第一个字符串strList[0]为"命名空间名" 
                string[] strList = assembly.FullName.Split(',');
                string frmFullName = string.Format("{0}.{1}", strList[0], frmName);

                // 根据class的全名称,实例化窗体
                Form frm = assembly.CreateInstance(frmFullName) as Form;

                // 设置Mdi的Father窗口
                frm.MdiParent = parentFrm;
                frm.WindowState = FormWindowState.Maximized;
                frm.Show();
            }
        }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

使用方式, 在主窗口FrmMain的菜单Clicked事件中调用方法
ControlHelper.MdiChildWinOpen() 即可,具体如下:

// 打开FrmWin1窗口
ControlHelper.MdiChildWinOpen(this, "FrmWin1", Assembly.GetExecutingAssembly());

// 打开FrmWin2窗口
ControlHelper.MdiChildWinOpen(this, "FrmWin2", Assembly.GetExecutingAssembly());
  • 1
  • 2
  • 3
  • 4
  • 5

这样用起来,是不是很简单!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/377840
推荐阅读
相关标签
  

闽ICP备14008679号