イベントの呼び出し
独自のイベントの定義 への移動
作成するコンポーネントでは、同じイベントをコードのさまざまな部分からトリガしなければならない可能性があります。これらのイベント呼び出しは一元化すべきです。つまり、アプリケーションのイベント ハンドラが割り当てられている場合にそれを呼び出すほか任意のデフォルト処理を行う仮想メソッドをコンポーネントに作成します。
これらの仮想メソッドをイベント ディスパッチャまたは Do メソッドと呼びます。後者の名称は、トリガするイベントにちなんだ名前をこれらのメソッドに付けるに当たって On
プレフィックスを Do
に置き換えることが最もよく用いられる命名法だからです。たとえば、OnClick
イベントをトリガするイベント ディスパッチャであれば、DoClick
という名前になります。
イベントの呼び出しをすべて 1 か所にまとめることにより、作成したコンポーネントから新しいコンポーネントを派生させる場合、コード中を探してイベントの呼び出し箇所を見つけるのではなく、ただ 1 つのメソッドをオーバーライドするだけで、イベント処理をカスタマイズすることができます。
イベント呼び出し時の考慮事項
イベントを呼び出す際は次の 2 つの事項についても考慮します。
イベント ディスパッチャの例
上記の考慮事項に沿ったイベント ディスパッチャの最も簡単な例を以下に示します。
C++ の場合:
virtual void __fastcall TComponentName::DoEventName(UnicodeString Parameter1, UnicodeString Parameter2)
{
if (FOnEventName)
FOnEventName(this, Parameter1, Parameter2);
}
Delphi の場合:
procedure TComponentName.DoEventName(Parameter1, Parameter2: string);
begin
if Assigned(FOnEventName) then
FOnEventName(Self, Parameter1, Parameter2);
end;
イベント ディスパッチャを使用すると、イベント ハンドラの呼び出しを 1 行に減らすことができます。FOnEventName 変数に値が割り当てられているかどうかを毎回確認する必要はありません。プログラムではイベント ディスパッチャを呼び出すだけでよく、変数の確認はこの手続きが行います。
また、このアプローチでは、作成したコンポーネントのサブクラスを開発者が作成して、イベントのトリガ処理を容易にオーバーライドすることもできます。