【发布时间】:2022-11-19 21:29:11
【问题描述】:
我在Windows Forms 有一个旧项目,它有超过 300 个菜单,整个 MDI 窗体都有菜单点击事件。
有什么方法可以获取字符串中的点击事件名称(例如“toolStripMenuItem_Click”)?
我这样试过
foreach (ToolStripMenuItem menu in menuStrip.Items)
{
foreach (ToolStripDropDownItem submenu in menu.DropDownItems)
{
var _events= submenu.GetType()
.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance)
.OrderBy(pi => pi.Name).ToList();
}
}
但它总是返回空的。实现这一目标的正确方法是什么?
【问题讨论】:
-
如果您在运行时需要名称:您的事件处理程序是否遵循名称以菜单项本身的名称开头的约定?
-
为什么你想要这个信息吗?你想解决什么问题? (并反映类型
ToolStripDropDownItem不会告诉你任何关于你自己项目的内容) -
@NineBerry 有些菜单有不同的处理程序。休息遵循惯例。
-
@Dai 我打算根据用户权限动态生成菜单。由于所有菜单点击处理程序都有很多条件(如是否、哪些、如何)打开表单,并且都运行良好,我将只映射事件处理程序名称与相应的菜单名称以触发菜单单击。但是有很多菜单和事件处理程序都在具有功能和所有功能的 mdiparent 中。这很讨厌。