我在「文件」菜單中創建了菜單項作爲命令。對於這個命令,有一個處理程序實現了接口IHandler
。該處理程序包含isEnabled
方法。我試圖使用這種方法來啓用/禁用我的菜單項,但是當我點擊「文件」菜單時,該方法僅被調用一次。當第二次,第三次等單擊時,即使改變頁面狀態(打開/關閉編輯器)之前,isEnabled
方法也不會再次被調用。更新Eclipse菜單項啓用狀態
我該怎麼辦?也許這種方法不適用於控制菜單項目?
我在「文件」菜單中創建了菜單項作爲命令。對於這個命令,有一個處理程序實現了接口IHandler
。該處理程序包含isEnabled
方法。我試圖使用這種方法來啓用/禁用我的菜單項,但是當我點擊「文件」菜單時,該方法僅被調用一次。當第二次,第三次等單擊時,即使改變頁面狀態(打開/關閉編輯器)之前,isEnabled
方法也不會再次被調用。更新Eclipse菜單項啓用狀態
我該怎麼辦?也許這種方法不適用於控制菜單項目?
您是繼承org.eclipse.core.commands.AbstractHandler
?你應該使用setBaseEnabled(boolean)
來更新你的處理程序的狀態(它會更新你的命令)。
只有當您還啓動HandlerEvent
時,纔可以更改處理程序中的啓用狀態。打電話給setBaseEnabled(boolean)
通常會比較容易,這會爲您啓動活動。
如果您嘗試啓用/禁用菜單,則應該使用核心表達式。 我已經解釋瞭如何做,在這個答案:
Eclipse RCP menus & actions: Configure or code?
,你是有興趣在開始的部分:
對於激活/停用菜單[... ]
我希望這是你要找的。
如果我有MenuManager的句柄,如何以編程方式啓用/禁用菜單項? – Neel 2013-01-30 17:12:04
@neel好的,(在上面提到的例子中),你應該調用CommandState.setNotLoaded(),它將變量「myapp.commands.sourceprovider.active」的值更改爲NOT_LOADED,然後這將被處理器中的條件檢測到。處理程序中的條件表明,如果「myapp.commands.sourceprovider.active」不等於PLAYING或PAUSED,則該按鈕應處於非活動狀態(因此已禁用)。 簡而言之,使用提供者類(這裏是CommandState)來更改觸發處理程序的變量的值。 – 2013-02-18 16:18:09