2011-05-21 8 views
6

「ファイル」メニューのメニュー項目をコマンドとして作成しました。このコマンドには、IHandlerインターフェイスを実装するハンドラがあります。このハンドラにはisEnabledメソッドが含まれています。このメソッドを使用してメニュー項目を有効/無効にしようとしていますが、「File」メニューをクリックするとそのメソッドが呼び出されます。 2回目、3回目などのときにクリックすると、以前にページの状態を変更しても、isEnabledメソッドが再度呼び出されることはありません。Eclipseメニュー項目を有効にした状態を更新します。

どうすればよいですか?たぶん、このメソッドは、コントロールメニュー項目を意図していない?

答えて

3

あなたはorg.eclipse.core.commands.AbstractHandlerをサブクラス化していますか?ハンドラの状態を更新するには、setBaseEnabled(boolean)を使用する必要があります(コマンドが更新されます)。

それは限り、あなたはまた、HandlerEventを発射として、あなたのハンドラ内で使用可能状態を変更するためにのみ有効です。通常、イベントを発生させるsetBaseEnabled(boolean)に電話する方が簡単です。

2

あなたはコア表現を使用する必要がありますよりも、メニューを有効/無効にしようとしている場合。あなたが持つ開始に興味を持っている

Eclipse RCP menus & actions: Configure or code?

一部: は、私はすでにこの答えであることを行う方法を説明してきたメニューの[を無効化/活性化するための

を... ]

私は、これはあなたが探しているものであると思います。

+0

MenuManagerのハンドルを持っている場合、メニューアイテムをプログラムで有効/無効にするにはどうすればよいですか?変数の値を変更します – Neel

+1

@Neelまあ、(前述の例では)あなたがCommandState.setNotLoaded(呼び出す必要があります)今度はハンドラ内で条件によって検出されるNOT_LOADEDに「myapp.commands.sourceprovider.active」 。ハンドラの条件では、 "myapp.commands.sourceprovider.active"がPLAYINGまたはPAUSEDと等しくない場合、ボタンは非アクティブ(無効)にする必要があります。 要するに、プロバイダクラス(ここではCommandState)を使用して、ハンドラをトリガする変数の値を変更します。 –

関連する問題