「DEKOのざつだん。」の11/10/10の記事でTCustomForm.UpdateActionsの紹介がありました。
おもしろそうだったので、試してみました。
フォームにメニュー、ツールバー、チェックボックスを2つ配置します。
メニュー、ツールバーのボタン、チェックボックスの1つにActionプロパティにAction1を指定します。
UpdateActionsメソッドをオーバーライトします。
下側のチェックボックス(CheckBox1)のチェックの状態によって、Action1のEnabledプロパティを変更するようにします。
Unit1.h
class TForm1 : public TForm
{
...
protected:
virtual void __fastcall UpdateActions(void);
};
Unit1.cpp
void __fastcall TForm1::UpdateActions(void)
{
Action1->Enabled = CheckBox1->Checked;
}
CheckBox1をチェックすると、Action1にひも付いているメニュー、ツールバーのボタン、チェックボックスの状態が更新されます。
もちろんCheckBox1のOnClickイベントに記述しても同じことができます。
ですが、UpdateActionsメソッドにアクションの更新処理をまとめて記述することで、ソースコードの見通しが良くなりそうだと思いました。
チェックボックスをもう一つ追加したところ。
アクションの状態はUpdateActionsメソッドの中で一括管理。
void __fastcall TForm1::UpdateActions(void)
{
Action1->Checked = CheckBox1->Checked;
Action2->Checked = CheckBox4->Checked;
}