先写一个Edit组件的OnEnter事件 例: (Sender as TEdit).Color:=clYellow; OnExit事件 (sender as TEdit).color:=clWhite; 然后设置所有的Edit控件的OnEnter和OnExit事件为上面的这两个事件。 我想这样就行了吧。
procedure TForm1.Edit1Enter(Sender: TObject); begin TEdit(Sender).Color := clBlue; end;procedure TForm1.Edit1Exit(Sender: TObject); begin TEdit(Sender).Color := clWindow; end;procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin for I := 0 to ControlCount-1 do if Controls[I].InheritsFrom(TEdit) then with TEdit(Controls[I]) do begin OnEnter := Edit1.OnEnter; OnExit := Edit1.OnExit; end; end;———————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 ————————————————————————————————————
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Edit1Enter(Sender: TObject); procedure Edit2Enter(Sender: TObject); private PreEnter, PreExit: Array of TNotifyEvent; public { Public declarations } published procedure EditEnter(Sender: TObject); procedure EditExit(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.EditEnter(Sender: TObject); begin with TEdit(Sender) do begin Color := clBlue; if Assigned(PreEnter[ComponentIndex]) then PreEnter[ComponentIndex](Sender); end; end;procedure TForm1.EditExit(Sender: TObject); begin with TEdit(Sender) do begin Color := clWindow; if Assigned(PreExit[ComponentIndex]) then PreExit[ComponentIndex](Sender); end; end;procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin SetLength(PreEnter, ComponentCount); SetLength(PreExit, ComponentCount); for I := 0 to ComponentCount-1 do if Components[I].InheritsFrom(TEdit) then with TEdit(Components[I]) do begin PreEnter[I] := OnEnter; OnEnter := EditEnter; PreExit[I] := OnExit; OnExit := EditExit; end; end;procedure TForm1.Edit1Enter(Sender: TObject); begin ShowMessage('Edit1Enter'); end;procedure TForm1.Edit2Enter(Sender: TObject); begin ShowMessage('Edit2Enter'); end;end.———————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 ————————————————————————————————————
例:
(Sender as TEdit).Color:=clYellow;
OnExit事件
(sender as TEdit).color:=clWhite;
然后设置所有的Edit控件的OnEnter和OnExit事件为上面的这两个事件。
我想这样就行了吧。
begin
TEdit(Sender).Color := clBlue;
end;procedure TForm1.Edit1Exit(Sender: TObject);
begin
TEdit(Sender).Color := clWindow;
end;procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ControlCount-1 do
if Controls[I].InheritsFrom(TEdit) then
with TEdit(Controls[I]) do
begin
OnEnter := Edit1.OnEnter;
OnExit := Edit1.OnExit;
end;
end;————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
如果我在ONENTER,ONEXIT上有其他的代码,这些代码会一同执行。如何能够更加优化啊?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Edit1Enter(Sender: TObject);
procedure Edit2Enter(Sender: TObject);
private
PreEnter, PreExit: Array of TNotifyEvent;
public
{ Public declarations }
published
procedure EditEnter(Sender: TObject);
procedure EditExit(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.EditEnter(Sender: TObject);
begin
with TEdit(Sender) do
begin
Color := clBlue;
if Assigned(PreEnter[ComponentIndex]) then
PreEnter[ComponentIndex](Sender);
end;
end;procedure TForm1.EditExit(Sender: TObject);
begin
with TEdit(Sender) do
begin
Color := clWindow;
if Assigned(PreExit[ComponentIndex]) then
PreExit[ComponentIndex](Sender);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
SetLength(PreEnter, ComponentCount);
SetLength(PreExit, ComponentCount);
for I := 0 to ComponentCount-1 do
if Components[I].InheritsFrom(TEdit) then
with TEdit(Components[I]) do
begin
PreEnter[I] := OnEnter;
OnEnter := EditEnter;
PreExit[I] := OnExit;
OnExit := EditExit;
end;
end;procedure TForm1.Edit1Enter(Sender: TObject);
begin
ShowMessage('Edit1Enter');
end;procedure TForm1.Edit2Enter(Sender: TObject);
begin
ShowMessage('Edit2Enter');
end;end.————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————