我有一个mdi表单,主菜单上有很多子表单,我使用这样的代码打开子表:
frmCustomers yeni = new frmCustomers();
if (GenelIslemler.formAuthCheck(yeni.Name.ToString()))
{
if (!IsOpen(yeni.Name.ToString()))
{
yeni.MdiParent = this;
yeni.WindowState = FormWindowState.Maximized;
yeni.Show();
}
}
else
{
MessageBox.Show("You dont have rights to access!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
但我想编写一个方法,只需将表单调用到该方法,如
的OpenForm(frmCustomers);
和openForm方法应该是这样的
openForm(Form frm) {...}
我该怎么办?
答案 0 :(得分:2)
这适用于每个NET应用程序内置的反射系统
using System.Reflection;
private void openForm(string formName)
{
// First check if this form is authorized
if (GenelIslemler.formAuthCheck(formName))
{
// Then check if is already opened
if (!IsOpen(formName))
{
// And now transform that string variable in the actual form to open
// This is the critical line. You need the fully qualified form name.
// namespace + classname
Type formType = Type.GetType ("RapunzoApps.ThisApp." + formName);
ConstructorInfo ctorInfo = formType.GetConstructor(Type.EmptyTypes);
Form theForm = (Form) ctorInfo.Invoke (null);
theForm.MdiParent = this;
theForm.WindowState = FormWindowState.Maximized;
theForm.Show();
}
}
else
{
MessageBox.Show("You dont have rights to access!", "uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}