您需要設置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