在winform appliaction中打开带有表单名称的表单
我想问一下,如何在winform c#中使用帮助或类名打开表单?
我有三种不同的forms
- 用户管理
- GroupsManagement
- LocationManagement
我从数据库获得这三种forms的许可
在菜单中单击我填充标签属性与此类型的表单
tsmMain.Tag = item.PermissionName tsmMain.Click += new EventHandler(tsmMain_Click);
我想要做的是在按钮点击动态打开表单并删除这些条件? 我可以用reflection做这个吗?
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(); }
您可以使用表单的名称作为字符串参数执行以下操作:
var form = (Form)Activator.CreateInstance(Type.GetType("YourNameSpace.UserManagement")); form.Show();
一个简单但不一定非常干净的解决方案是将表单存储在菜单项的Tag
属性中,而不是字符串。
在应用程序开始的某个地方,您必须分配这些实例:
myUserManagementItem.Tag = new UserManagement(); myGroupsManagementItem.Tag = new GroupManagement();
然后,在click事件中,您可以将代码缩短为:
ToolStripMenuItem aa = sender as ToolStripMenuItem; Form form = aa.Tag as Form; form.Show();
清洁解决方案包括以下内容:
- 为不同的菜单项提供单独的事件处理程序。
- 导出您自己的菜单项类型,用于存储要在强类型属性中显示的表单。
- 如何在运行时在IEnumerable 上创建动态多属性Select?
- 在wpf c#中的某些控件中禁用全局KeyBinding
- DB-First与ASP.NET Web API 2 + EF6的身份validation混淆
- 在Visual Studio 2005中使用Crystal Reports(C#.NET Windows应用程序)
- Trace.Write()和Trace.TraceInformation()之间的区别
- linq的区别?
- 无法在Mono中加载’System.Web.Http.WebHost.Routing.HttpRouteExceptionHandler’类型
- 何时应该&不应该使用此C#实用程序类通过Interlocked控制线程
- 绑定工作没有INotifyPropertyChanged,为什么?