OnExit無法觸發 |
答題得分者是:ccchen
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
請問我在formcreate寫了以下了code,若我在任一TDbedit元件的OnExit寫何code都無法觸發,請問是為什麼??
但是我的做法是繼承此form,所以應該除了原來onexit會觸發,繼承後的Onexit也會觸發,可是卻不做事???
procedure TBaseForm.FormCreate(Sender: TObject);
var i: Integer;
begin
SetonEnter(self);
end;
procedure TBaseForm.SetonEnter(Control:TWinControl);
var i: integer;
begin
if (Control is TDbEdit) then
begin
Tedit(Control).OnEnter :=EdtEnter;
Tedit(Control).OnExit :=EdtExit;
end
else if Control.ControlCount >0 then
for i := 0 to Control.ControlCount-1 do
if Control.controls[i] is TWinControl then
SetOnEnter(TWinControl(Control.Controls[i]));
end; procedure TBaseForm.EdtEnter(Sender: TObject);
begin
OldColor:=TDbedit(Sender).Color;
Tedit(Sender).Color :=clyellow;
end;
procedure TBaseForm.EdtExit(Sender: TObject);
begin
Tedit(Sender).Color :=OldColor;
end; 發表人 - cyl 於 2003/01/16 11:50:44 發表人 - cyl 於 2003/01/16 12:14:25
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
onEnter, onExit都只有一個property, 你將他指向那一個procedure他就執行那一個procedure. 假設NewForm繼承TBaseForm, 在DesignTime你寫入DBEdit1之onEnter, 此時DBEdit1之onEnter指向TNewForm.Dbedit1Enter, 當程式開始執行TNewForm之create, 先完成各元件之create, 此時onEnter=TNewForm.Dbedit1Enter,之後開始執行FormCreate內之inherited, 於是onEnter=EdtEnter, 故dbedit1Enter永遠不會被執行 你必須改架構, 以下給你參考 一.直接繼承EdtEnter, 如此NewForm中所有DBEDit均會執行所有程式碼
1. 在BaseForm中 TBaseForm = class(TForm) ,,, procedure EdtEnter(Sender: TObject);dynamic; procedure EdtExit(Sender: TObject);dynamic; { Public declarations } end; 2. 在NewForm中 TNewForm = class(TBaseForm) ,,, procedure EdtEnter(Sender: TObject);override; procedure EdtExit(Sender: TObject);override; { Public declarations } end; procedure TNewForm.EdtEnter(Sender: TObject); begin inherited; //以下執行新加之程式碼 end; 二. 針對特定DBEdit重導onEnter Event 1. 針對NewForm DesignTime仍寫enEnter procedure TNewForm.DBEdit1Enter(Sender: TObject); begin EdtEnter(self); //直接呼叫,而不是inherited, inherited會找baseForm之DBEdit1Enter //以下執行新加之程式碼 end; 2. 在formCreate重導onEnter Event procedure TNewForm.FormCreate(Sender: TObject); begin inherited; Dbedit1.OnEnter:=DBEdit1Enter;//重導onEnter Event end;發表人 - ccchen 於 2003/01/16 13:49:40 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |