在winform应用程序中使用表单名称打开表单

时间:2013-03-01 10:02:58

标签: c# winforms c#-4.0 desktop-application windows-applications

我想问一下,如何在winform c#中使用帮助或类名打开表单?

我有三种不同的形式

  • UserManagement
  • GroupsManagement
  • LocationManagement

我从数据库获得这三种表格的许可

在菜单中点击我填写标签属性,其名称为此

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();
        }

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

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

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

myUserManagementItem.Tag = new UserManagement();
myGroupsManagementItem.Tag = new GroupManagement();

然后,在点击事件中,您可以将代码缩短为:

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

清洁解决方案包括以下内容:

  • 为不同的菜单项提供单独的事件处理程序。
  • 导出您自己的菜单项类型,用于存储要在强类型属性中显示的表单。