【问题标题】:Open form with Form Name in winform appliaction在 winform 应用程序中使用表单名称打开表单
【发布时间】:2013-02-15 19:03:50
【问题描述】:

我想问在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();
        }

【问题讨论】:

  • 有什么方法可以将PermissionName 与实际的Form 相匹配,比如一个名为FormName 的属性或类似的东西

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2021-03-08
      相关资源
      最近更新 更多