2012-03-17 14 views
4

私はそうイベントの割り当て

unit UnitTest; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MyCustomEdit; 

type 
    TEdit=class (TMyCustomEdit); 
    TFormTest = class(TForm) 
    Edit1: TEdit; 
    Edit2: TEdit; 
    procedure Edit1Exit(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    FormTest: TFormTest; 

implementation 

{$R *.dfm} 

procedure TFormTest.Edit1Exit(Sender: TObject); 
begin 
    ShowMessage('Hello from TFormTest');//this code is always executed 
end; 

end. 

のようなインターポーザクラスを使用していますので、

unit MyCustomEdit; 

interface 

uses 
    Classes, 
    StdCtrls; 

type 
TMyCustomEdit=class(TEdit) 
private 
    procedure MyExit(Sender: TObject); 
public 
    constructor Create(AOwner: TComponent); override; 
end; 



implementation 

{ TMyCustomEdit } 

uses 
Dialogs; 

constructor TMyCustomEdit.Create(AOwner: TComponent); 
begin 
    inherited; 
    OnExit:=MyExit; 
end; 

procedure TMyCustomEdit.MyExit(Sender: TObject); 
begin 
    ShowMessage('Hello from TMyCustomEdit');//this is show only when is not assignated a event handler in the onexit event. 
end; 

end. 

私のアプリのメインフォーム上のようなフォーカス喪失時のイベントを処理TEDITの子孫を書きました今、私はOnexitイベントがメインフォームで割り当てられると、TMyCustomEditの独自の1回実装が、TFormTestフォームのOnExitイベントのコードと同様に実行されることを望みます。しかし、コードを実行すると、TFormTest.OnExitイベントのコードだけが実行されます。どのようにして両方のメソッドの実装が実行されたのですか?

答えて

10

オーバーライドDoExit。これは、コントロールがフォーカスを失ったときに呼び出され、OnExitイベントをトリガするメソッドです。あなたの欲求に応じて、後にinherited DoExitに電話してください。

関連する問題