zoukankan      html  css  js  c++  java
  • 窗体单例问题

    方法1:泛型

    使用方法: frm材料类别维护 f = frmCreate<frm材料类别维护>.createFrom(this);

        public class frmCreate<T> where T : Form, new()
        {
            private static T instance;
            public static T createFrom(Form mdi)
            {
                if (instance == null || instance.IsDisposed)
                {
                    instance = new T();
                    instance.StartPosition = FormStartPosition.CenterScreen;
                    instance.MdiParent = mdi;
                    instance.Show();
                }
                instance.WindowState = FormWindowState.Normal;
                return instance;
            }
        }

    方法2:反射

    使用方法: Form f = frmCreateByName.createForm(this, "基础数据.frm材料类别维护");

        public class frmCreateByName
        {
            public static Form createForm(Form mdi, string frmName)
            {
                string className = frmName.Substring(frmName.IndexOf(".") + 1);
                //保证单例问题
                foreach (Form frm in Application.OpenForms)
                {
                    if (frm.Name.Equals(className))
                        return frm;
                }
                Assembly assembly = Assembly.GetExecutingAssembly();
                Form instance = assembly.CreateInstance("珠宝加工管理系统." + frmName) as Form;
                instance.StartPosition = FormStartPosition.CenterScreen;
                instance.MdiParent = mdi;
                instance.WindowState = FormWindowState.Normal;
                instance.Show();
                return instance;
            }
        }
  • 相关阅读:
    复制文字时自动加版权
    Linux安装Docker
    ThreadLocal 理解
    Spring多数据源动态切换
    [LOJ#500]「LibreOJ β Round」ZQC的拼图
    [JLOI2015]装备购买
    「雅礼集训 2017 Day4」洗衣服
    [BJWC2011]元素
    [51nod1577]异或凑数
    [ARC101B]Median of Medians
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/4330443.html
Copyright © 2011-2022 走看看