Assembly asm = Assembly.Load("Fastyou.BookShop.Win");
                object frmObj = asm.CreateInstance("Fastyou.BookShop.Win." + formName);
                Form frms = (Form)frmObj;
                //我要打开的窗口是有参数的,现在怎么把参数传进去?
                //如果不是动态生成菜单的事件是可以这么写 
                //MyForm frms=new MyForm("传入的参数");
                //可是现在是动态生成的菜单的事件只能这杨Form frms = (Form)frmObj;可只能打开无参数的窗口
                frms.MdiParent = this;
                frms.Show();                怎么动态打开可以传参数的窗口?各位高手指教!用来救命的!!!

解决方案 »

  1.   

    通过反射加载类的时候,获取带参构造函数的方法:给你个例子看一下://一个类库
    using System;
    using System.Collections.Generic;
    using System.Text;namespace ClassLibrary1
    {
        public class Class1
        {
            private string m_str;        public string ReturnString
            {
                get { return m_str; }
            }        public Class1()
            { }        public Class1(string str)
            {
                m_str = str;
            }
        }
    }//一个通过反射动态加载类库的窗体
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Reflection;namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                //获取程序集
                Assembly asm = Assembly.LoadFrom(@"D:\WindowsApplication1\ClassLibrary1\bin\Debug\ClassLibrary1.dll");
                //获取类型
                Type type = asm.GetType("ClassLibrary1.Class1");
                //获取调用有参构造函数对象(其实这里返回的是一个System.Runtime.Remoting.ObjectHander对象的引用,派生自System.MarshalByRefObject)
                object o = Activator.CreateInstance(type, "有参构造函数");
                //调用Class1类的ReturnString属性
                PropertyInfo pi = type.GetProperty("ReturnString", typeof(string));
                //获取属性值
                string s = pi.GetValue(o, null).ToString();
                MessageBox.Show(s);
            }
        }
    }