通过反射动态SHOW出的窗体 怎么传递参数
通过数据库字段动态加载菜单,点击菜单后通过反射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
[解决办法]
有重载啊
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)。
[解决办法]
反射创建对象的时候,是可以传递参数的,重载一下构造函数。
[解决办法]
弹出窗体加自定义的Show方法,比如MyShow(string params);
反射的时候Invoke这个MethodInfo