通过数据库字段动态加载菜单,点击菜单后通过反射SHOW出窗体,现在的问题是怎么样才能给这些个SHOW的窗口传递参数(string 类型)?
SHOW出窗体的代码如下。ToolStripMenuItem tsi = sender as ToolStripMenuItem;//得到事件源,强转为菜单项
                    Assembly asb = Assembly.GetExecutingAssembly();//得到当前的程序集
                    Form f = (Form)asb.CreateInstance("Test." + tsi.Tag.ToString());//利用反射,根据数据库中的字段值创建窗体对象
                    foreach (System.Windows.Forms.Form ff in pnc_info.Controls)
                    {
                        //如果子窗体存在,激活子窗体                         if (ff.Name == f.Name)
                        {
                            ff.WindowState = System.Windows.Forms.FormWindowState.Minimized;
                            ff.Activate();
                            ff.Size = ff.Parent.Size;
                            ff.WindowState = System.Windows.Forms.FormWindowState.Maximized;
                            return;
                        }
                    }     
                    f.TopLevel = false;                           //设置属性       
                    f.Show();                                 //显示form

解决方案 »

  1.   

    有重载啊public virtual Object CreateInstance(
        string typeName,
        bool ignoreCase,
        BindingFlags bindingAttr,
        Binder binder,
        Object[] args,
        CultureInfo culture,
        Object[] activationAttributes
    )
    args
    类型: array<System ..::.Object []()>[]
    Object 类型的数组,包含要传递给构造函数的参数。 此参数数组在数量、顺序和类型方面必须与要调用的构造函数的参数匹配。如果需要默认的构造函数,则 args 必须是空数组或 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)。
      

  2.   


            public static void OpenOneForm<T>(object[] parameters) where T : Form
            {
                Form openForm = null;
                foreach (Form form in System.Windows.Forms.Application.OpenForms)
                {
                    if (form.GetType() == typeof(T))
                    {
                        openForm = form;
                        break;
                    }
                }
                if (openForm != null)
                {
                    if (openForm.WindowState == FormWindowState.Minimized)
                        openForm.WindowState = FormWindowState.Normal;
                    openForm.Activate();
                }
                else
                {
                    openForm = (T)Activator.CreateInstance(typeof(T), parameters);
                    openForm.Show();
                }
            }给段代码,可以参考一下。
      

  3.   

    弹出窗体加自定义的Show方法,比如MyShow(string params);
    反射的时候Invoke这个MethodInfo
      

  4.   

    form = (Form)ass.CreateInstance(space + "." + type.ToString() + "." + formClassName, false, BindingFlags.Default, null, arg, null, null);
    arg:object[]