ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过字符串反射调用窗体

2019-08-11 13:36:47  阅读:391  来源: 互联网

标签:Exception 调用 MDIForm NewForm 窗体 ex 字符串 formName string


原文链接:http://www.cnblogs.com/guhuiquan/archive/2013/03/15/2961272.html

 

今天查阅了网上一堆通过字符串反射调用窗体的源码,也写了一个。自认为还不错。

 

      /// <summary>
        /// 反射打开窗口,如果没有主窗体,则会以模式显示。
        /// </summary>
        /// <param name="formName">窗口名称</param>
        /// <param name="MDIForm">主窗体</param>
        private static void CreateForm(string formName, MDIMain MDIForm, string formText, params object[] CreateArgs)
        {
            MDIForm.Cursor = Cursors.WaitCursor;
            try
            {
                Type mfromType=null;
                try
                {
                    mfromType = Type.GetType(formName,true,false);
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("创建窗口类时出错!\n类全名:{0}", formName), ex);
                }
                Form NewForm = null;
                foreach (Form formItem in Application.OpenForms)
                {
                    if (formItem.GetType() == mfromType)
                    {
                        if (formItem.Text == formText)
                        {
                            NewForm = formItem;
                            break;
                        }
                    }
                }
                if (NewForm != null)
                {
                    if (NewForm.WindowState == FormWindowState.Maximized)
                        NewForm.WindowState = FormWindowState.Normal;
                    NewForm.Activate();
                }
                else
                {
                    try
                    {
                        NewForm = (Form)Activator.CreateInstance(mfromType, CreateArgs);
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(string.Format("窗口加载时出错。\n类全名:{0}\n错误描述:{1}", formName, ex.Message), ex);
                    }
                    try
                    {
                        NewForm.Text = formText;
                        if (MDIForm == null)
                        {
                            MDIForm.Cursor = Cursors.Default;
                            NewForm.ShowDialog();
                        }
                        else
                        {
                            NewForm.MdiParent = MDIForm;
                            NewForm.Dock = DockStyle.Fill;
                            NewForm.Show();
                            MDIForm.Cursor = Cursors.Default;
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(string.Format("窗口打开时出错\n类全名:{0}\n窗口名:{1}\n错误描述:{2}", formName, NewForm.Name, ex.Message), ex);
                    }
                }
            }
            catch (Exception ex)
            {
                MyRecorder.Say(ex);
            }
            finally
            {
                MDIForm.Cursor = Cursors.Default;
            }
        }

 

转载于:https://www.cnblogs.com/guhuiquan/archive/2013/03/15/2961272.html

标签:Exception,调用,MDIForm,NewForm,窗体,ex,字符串,formName,string
来源: https://blog.csdn.net/weixin_30758821/article/details/99183635

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有