2011-05-21 94 views
6

我在「文件」菜單中創建了菜單項作爲命令。對於這個命令,有一個處理程序實現了接口IHandler。該處理程序包含isEnabled方法。我試圖使用這種方法來啓用/禁用我的菜單項,但是當我點擊「文件」菜單時,該方法僅被調用一次。當第二次,第三次等單擊時,即使改變頁面狀態(打開/關閉編輯器)之前,isEnabled方法也不會再次被調用。更新Eclipse菜單項啓用狀態

我該怎麼辦?也許這種方法不適用於控制菜單項目?

回答

3

您是繼承org.eclipse.core.commands.AbstractHandler?你應該使用setBaseEnabled(boolean)來更新你的處理程序的狀態(它會更新你的命令)。

只有當您還啓動HandlerEvent時,纔可以更改處理程序中的啓用狀態。打電話給setBaseEnabled(boolean)通常會比較容易,這會爲您啓動活動。

2

如果您嘗試啓用/禁用菜單,則應該使用核心表達式。 我已經解釋瞭如何做,在這個答案:

Eclipse RCP menus & actions: Configure or code?

,你是有興趣在開始的部分:

對於激活/停用菜單[... ]

我希望這是你要找的。

+0

如果我有MenuManager的句柄,如何以編程方式啓用/禁用菜單項? – Neel 2013-01-30 17:12:04

+1

@neel好的,(在上面提到的例子中),你應該調用CommandState.setNotLoaded(),它將變量「myapp.commands.sourceprovider.active」的值更改爲NOT_LOADED,然後這將被處理器中的條件檢測到。處理程序中的條件表明,如果「myapp.commands.sourceprovider.active」不等於PLAYING或PAUSED,則該按鈕應處於非活動狀態(因此已禁用)。 簡而言之,使用提供者類(這裏是CommandState)來更改觸發處理程序的變量的值。 – 2013-02-18 16:18:09