C#反射调用动态调用窗体与实例化窗体的方法

作者:袖梨 2022-06-25

单击那个按钮就会出现那个窗体,

如果非常多的按钮的话我们是不是一般会这样写

 代码如下 复制代码

private void button3_Click(object sender, EventArgs e)
        {
            //获取单击的Button名称
            string btnname = ((Button)sender).Name;
            if (btnname == "button1")
            {
                //处理窗体
            }
            else if (btnname == "button2")
            {
                //处理窗体
            }
            else
            {
                //处理窗体
            }
}

这里只能简单的处理单个了,如果100多个上千个就不行了,代码太麻烦了。

 代码如下 复制代码

  ///

 
        /// 打开新的子窗体 
        ///
 
        /// 窗体的类名 
        /// 窗体所在类库的名称  
        public static void CreateForm(string strName, string AssemblyName)
        {
            string path = AssemblyName;//项目的Assembly选项名称 
            string name = strName; //类的名字 
            Form doc = (Form)Assembly.Load(path).CreateInstance(name);
            doc.Show();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //获取单击的Button名称
            string btnname = ((Button)sender).Text;
            CreateForm("WindowsFormsApplication1." + btnname, "WindowsFormsApplication1");
}

果你使用的子窗体的模式还可以使用下面的代码进行限制重复打开的

 代码如下 复制代码

///

 
        /// 打开新的子窗体 
        ///
 
        /// 窗体的类名 
        /// 窗体所在类库的名称 
        /// 父窗体 
        public static void CreateForm(string strName, string AssemblyName, Form MdiParentForm) 
        { 
            int Index = strName.LastIndexOf("."); 
            string FormName = strName.Substring(23); 
            if (!ShowChildForm(FormName, MdiParentForm)) 
            { 
                string path = AssemblyName;//项目的Assembly选项名称 
                string name = strName; //类的名字 
                Form doc = (Form)Assembly.Load(path).CreateInstance(name); 
                doc.WindowState = FormWindowState.Maximized; 
                doc.MdiParent = MdiParentForm; 
                doc.Show(); 
            } 
        } 
 
        ///  
        /// 防止子窗体再度打开 
        ///
 
        ///  
        ///  
        ///  
        public static bool ShowChildForm(string p_ChildrenFormText, Form MdiParentForm) 
        { 
            int i; 
            //依次检测当前窗体的子窗体 
            for (i = 0; i < MdiParentForm.MdiChildren.Length; i++) 
            { 
                //判断当前子窗体的Text属性值是否与传入的字符串值相同 
                if (MdiParentForm.MdiChildren.Name == p_ChildrenFormText) 
                { 
                    //如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值 
                    MdiParentForm.MdiChildren.Activate(); 
                    return true; 
                } 
            } 
            //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值 
            return false; 
        } 

好了这些都是亲身测试过的,大家可进入参考。

相关文章

精彩推荐