C# 在winform Appliation中打开具有表单名称的表单

C# 在winform Appliation中打开具有表单名称的表单,c#,winforms,c#-4.0,desktop-application,windows-applications,C#,Winforms,C# 4.0,Desktop Application,Windows Applications,我想问,在winform c#中,我应该如何使用帮助或类名打开窗体 我有三种不同的形式 用户管理 团体管理 位置管理 我从数据库获得了这三个表单的权限 在菜单中单击“我用表单名称填充标记属性”,如下所示 tsmMain.Tag = item.PermissionName tsmMain.Click += new EventHandler(tsmMain_Click); 我想做的是在按钮点击中动态打开表单,并删除这些if条件? 我可以通过反射或其他方式来实现吗 ToolStripMenuIt

我想问,在winform c#中,我应该如何使用帮助或类名打开窗体

我有三种不同的形式

  • 用户管理
  • 团体管理
  • 位置管理
我从数据库获得了这三个表单的权限

在菜单中单击“我用表单名称填充标记属性”,如下所示

tsmMain.Tag = item.PermissionName
tsmMain.Click += new EventHandler(tsmMain_Click);
我想做的是在按钮点击中动态打开表单,并删除这些if条件? 我可以通过反射或其他方式来实现吗

ToolStripMenuItem aa = sender as ToolStripMenuItem;
        var tag = aa.Tag;
        if (tag == "User Management")
        {
            UserManagement oUserForm = new UserManagement();
            oUserForm.Show();
        }
        if (tag == "Groups Management")
        {
            GroupManagement oGroupForm = new GroupManagement();
            oGroupForm.Show();
        }

一个简单但不一定非常干净的解决方案是将表单直接存储在菜单项的
标记
属性中,而不是字符串中

在应用程序开始的某个地方,您必须分配以下实例:

myUserManagementItem.Tag = new UserManagement();
myGroupsManagementItem.Tag = new GroupManagement();
然后,在单击事件中,您可以将代码缩短为:

ToolStripMenuItem aa = sender as ToolStripMenuItem;
Form form = aa.Tag as Form;
form.Show();

更清洁的解决方案包括:

  • 为不同的菜单项提供单独的事件处理程序
  • 派生您自己的菜单项类型,这些菜单项类型存储要在强类型属性中显示的表单

您可以使用表单名称作为字符串参数执行以下操作:

var form = (Form)Activator.CreateInstance(Type.GetType("YourNameSpace.UserManagement"));
form.Show();

有没有办法将
PermissionName
与实际的
Form
匹配,比如一个名为
FormName
的属性之类的