Как ссылаться на пункт меню через тег или имя

Я работаю над списком контроля доступа, в котором я должен показать / скрыть пункты меню на основе назначенных ролей. Я ссылался на каждый пункт меню через TAG. Теперь у меня в массиве хранятся все имена TAG.

Возможно ли, чтобы я просто зацикливался на массиве имен тегов и просто ссылался на элемент управления элемента меню по тегу или имени без зацикливания на всех элементах menuStrip, сравнивал текущий элемент управления и делал его видимым?

Спасибо

2 ответа

Я думаю, что теперь я понимаю лучше. Следующий код превращает ToolStripMenuItem видимый (или измените на какой-либо тип вашего объекта). Я использую имя, потому что для использования тега вам нужно будет перечислить все объекты.

    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 должна быть форма, которая содержит меню.

Я не совсем понимаю, чего вы пытаетесь достичь, но, возможно, этот код поможет вам:

    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()));
            }
        }
    }
Другие вопросы по тегам