您需要设置toolStripAuthorize.Enabled
为true
或false
。
我不知道是什么INFOpermission.accessAuthorize
,因为你没有显示定义它的代码(枚举?),但如果它不是false
,这不会像你期望的那样工作。
我可以保证在事件处理程序中设置要禁用的Enabled
属性将起作用。如果它对您不起作用,则说明您做错了其他事情,您需要向我们提供更多信息才能继续。ToolStripMenuItem
false
Opening
如果您遇到困难,请参阅此处的示例代码:如何:处理 ContextMenuStrip 打开事件
编辑:有了评论中提供的新信息,我现在已经隔离了问题的根源。您已将 分配ContextMenuStrip
给控件RowTemplate
,DataGridView
因此无法在其Opening
事件处理程序方法中修改该上下文菜单中包含的项目。
事实证明,这是一个已知的错误,有人认为这是“设计使然”。您可以在 Microsoft Connect 上查看原始错误报告。给出的解释是,每当基于RowTemplate
(这是如何RowTemplate
工作的)创建新行时ContextMenuStrip
,您分配的 也将被克隆。这意味着不会对每一行使用相同的上下文菜单实例,并且您尝试在原始菜单项上设置的任何属性都无效。
幸运的是,它也为我们提供了一种解决方法。与所有事件一样,事件将即将打开Opening
的实际实例作为其参数传递。这是上下文菜单,您需要修改其项目才能使您的更改可见。ContextMenuStrip
sender
那么代码是什么?它看起来像这样:
private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
ContextMenuStrip cmnu = (ContextMenuStrip)sender;
cmnu.Items[1].Enabled = false;
}
但是请注意,您必须通过索引引用要修改的单个菜单项。这只是您要修改的菜单项的从零开始的位置。您不能toolStripAuthorize
像以前那样使用该对象,因为它的新实例已为每个新的上下文菜单实例克隆。