您需要设置toolStripAuthorize.Enabled
要么true
或false
。
我不知道什么是INFOpermission.accessAuthorize
因为你没有显示定义代码(枚举?),但如果它比false
其他任何东西,这是不会像你期望的工作了。
我可以保证,设置要禁用false
在Opening
event处理的ToolStripMenuItem
的Enabled
property将工作。如果它不适合你,你做了其他的事情,你需要给我们更多的信息。
如果你坚持,看到这里的示例代码:How to: Handle the ContextMenuStrip Opening Event
编辑:武装与意见提供了新的信息,我现在已经分离出的问题的根源。您已将ContextMenuStrip
分配给控件的RowTemplate
,因此无法修改其Opening
事件处理程序方法中该上下文菜单中包含的项目。
事实证明,这是一个已知的错误,某人决定是“按设计”。你可以看到原始的错误报告here on Microsoft Connect。给出的解释是,无论何时根据RowTemplate
(RowTemplate
的工作方式)创建新行,您分配的ContextMenuStrip
也会被克隆。这意味着每行不使用相同的上下文菜单实例,并且您试图在原始菜单项上设置的任何属性都不起作用。
幸运的是,它也给了我们一个解决方法。与所有事件一样,Opening
事件传递将要作为其sender
参数打开的ContextMenuStrip
的实际实例。 此是您需要修改的项目的上下文菜单,以便您的更改可见。
那么代码是什么?它看起来像这样:
private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
ContextMenuStrip cmnu = (ContextMenuStrip)sender;
cmnu.Items[1].Enabled = false;
}
通知,不过,你必须引用您希望通过它的索引修改个别菜单项。这只是您要修改的菜单中项目的从零开始的位置。您不能使用之前尝试执行的toolStripAuthorize
对象,因为它的新实例已针对每个新的上下文菜单实例进行了克隆。
1.向我们展示更多代码。 2.当您在赋值后放置断点时,toolStripAuthorize将Enabled设置为false还是true? 3.当预期时,INFOpermission.accessAuthorize是否设置为false? – dzendras 2011-01-14 10:53:32