从数据库获得50个功能模块,动态加载在TreeView上,点击该node时,实例化该模块对应保存在数据库的窗体名称但是要怎样实例化这个form呢?
我查了一下,好像要使用Reflection反射机制,但是听说会很大程度的牺牲性能,请问怎样解决这个问题啊?

解决方案 »

  1.   

    try..object obj = Activator.CreateInstance(Type.GetType("命名空间.类名"));
      

  2.   

    我是这样弄的,谢谢大家!
    private void PRMS_TreeView_AfterSelect(object sender, TreeViewEventArgs e)
            {
                if (PRMS_TreeView.SelectedNode.Tag != null)
                {
                    try
                    {
                        //获得 PRMS_OBJECT 程序集中的所有类型
                        Assembly a = Assembly.LoadFrom("PRMS_OBJECT.exe");
                        Type[] mytypes = a.GetTypes();
                        Type ht = null;
                        foreach (Type t in mytypes)
                        {
                            if (t.Name.Equals(this.PRMS_TreeView.SelectedNode.Tag))
                            {
                                ht = t;                            
                                break;
                            }
                        }
                        if (ht != null)
                        {
                            //调用无参数构造函数,并且把该类强制类型转化为Form
                            Form frm = (Form)Activator.CreateInstance(ht);
                            frm.MdiParent = this;
                            frm.Show();
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }