Вам нужно установить toolStripAuthorize.Enabled
на true
или false
.
Я понятия не имею, что такое INFOpermission.accessAuthorize
, потому что вы не показали код, которыйопределяет это (enum?), но если это что-то отличное от false
, это не сработает так, как вы ожидаете.
Я могу гарантировать, что установка свойства Enabled
из ToolStripMenuItem
, который вы хотите отключить для false
в событии Opening
обработчик будет работать .Если это не работает для вас, вы делаете что-то еще неправильно, и вам нужно дать нам больше информации для продолжения.
Если вы застряли, посмотрите пример кода здесь: Какобработать событие открытия ContextMenuStrip
РЕДАКТИРОВАТЬ: Вооружившись новой информацией, предоставленной в комментариях, я теперь выделил источник проблемы.Вы присвоили ContextMenuStrip
RowTemplate
элемента управления DataGridView
и поэтому не можете изменять элементы, содержащиеся в этом контекстном меню, в его методе обработки событий Opening
.
Получаетсявыяснилось, что это известная ошибка, которую кто-то решил «по замыслу».Вы можете увидеть исходное сообщение об ошибке здесь, в Microsoft Connect .Данное объяснение состоит в том, что всякий раз, когда создается новая строка на основе RowTemplate
(как работает RowTemplate
), назначенный вами ContextMenuStrip
также клонируется.Это означает, что один и тот же экземпляр контекстного меню не используется для каждой строки, и любые свойства, которые вы пытаетесь установить в элементах меню original , не действуют.
К счастью, он также дает намобходной путь.Как и все события, событие Opening
передает фактический экземпляр ContextMenuStrip
, который должен быть открыт, как его параметр sender
. Это - это контекстное меню, пункты которого вам нужно изменить, чтобы ваши изменения были видны.
Итак, что за код? Это выглядит так:
private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
ContextMenuStrip cmnu = (ContextMenuStrip)sender;
cmnu.Items[1].Enabled = false;
}
Обратите внимание, что вам придется ссылаться на отдельный пункт меню, который вы хотите изменить, по его индексу.Это просто нулевая позиция элемента в меню, который вы хотите изменить.Вы не можете использовать объект toolStripAuthorize
, как пытались сделать раньше, потому что новый экземпляр этого объекта был клонирован для каждого нового экземпляра контекстного меню.