如何通过标签或名称引用菜单项

本文关键字:引用 菜单项 何通过 标签 | 更新日期: 2023-09-27 18:07:16

我正在访问控制列表中工作,我必须根据分配的角色显示/隐藏菜单项。我已经通过TAG参考了每个菜单项。现在我有一个存储所有TAG名称的数组。

是否有可能我只是循环通过标签名称数组,只是通过标签或名称引用菜单项控件,而不循环通过所有menuStrip项并比较当前控件并使其可见?

谢谢

如何通过标签或名称引用菜单项

我不明白你到底想要实现什么,但也许这段代码对你有帮助:

    private void button1_Click(object sender, EventArgs e) {
        var menus = new string[] { "Every", "menu", "you", "want", "to", "show" };
        foreach (var mnu in this.GetType().GetFields(
            BindingFlags.Instance | 
            BindingFlags.NonPublic | 
            BindingFlags.GetField)) {
            var member = mnu.GetValue(this) as MenuStrip;
            if (null != member) {
                member.Visible = (menus.Contains(member.Tag.ToString()));
            }
        }
    }

我想我现在明白多了。下面的代码将一个ToolStripMenuItem变为可见(或者将其更改为对象的任何类型)。我使用Name,因为如果要使用Tag,就必须枚举所有对象。

    private void ShowItem(string menuItemName) {
        var field = this.GetType().GetField(
            menuItemName, 
            BindingFlags.Instance |
            BindingFlags.NonPublic |
            BindingFlags.GetField);
        var mnu = field.GetValue(this) as ToolStripMenuItem;
        if (null != mnu) {
            mnu.Visible = true;
        }
    }

注意this必须是包含菜单的表单