我想在任一的控件获得焦点时,就能知道它的components[i]的[i]是多少,怎么办呢?(30分)

  • 主题发起人 主题发起人 tuer
  • 开始时间 开始时间
T

tuer

Unregistered / Unconfirmed
GUEST, unregistred user!
我知道这样可以遍历窗体控件:
var
i:integer;
begin
for i:=0 to Components.Count-1 do
if components is TEdit then
TEdit(Components).方法或属性设置;
end;
我的窗体上有很多Edit倥件,我想在任一的edit获得焦点时就改变背景色,又不想在每个
edit的onenter都写代码,我想在任一的edit获得焦点时,就能知道它的是多少,这样
我就可以做个过程来调用了,怎么办呢?
 
初始时把所有用到的EDIT加入一个TLIST, 然后在onenter里面用TLIST.IndexOf(Sender)这样还好一点
 
写一个Onenter事件,其他的都指向那个不就行了。
 
我在窗体上扔了5个Edit。然后在Edit1上面
procedure TForm1.Edit1Enter(Sender: TObject);
var
i:integer;
begin
for i:=0 to ComponentCount-1 do
if components is TEdit then
if Components = Sender then
TEdit(Components).Color := clBlue
else
TEdit(Components).Color := clWindow;
end;

写好后,选中除Edit1之外的其它Edit,然后在Events中的OnEnter项选Edit1Enter
最后按F9
就是你要的效果了
 
我知道写一个Onenter事件,其他的都指向它,但我要改变获得焦点的控件的行为,我需要
知道当前获得焦点的是那一个控件
 
Components = Sender 这句看不懂,解释一下好吗?
 
关于改变背景色的问题,milpas的回答挺好。
当前获得焦点的控件,是否可以用ActiveControl得到呢?
 
edit.componentindex
 
>Components = Sender 这句看不懂,解释一下好吗?
Sender在事件里边是指这个事件是谁触发的

if Components = Sender then //如果这个控件是触发的那个控件
TEdit(Components).Color := clBlue //颜色变蓝
else
TEdit(Components).Color := clWindow; //恢复默认颜色
 
设置每个EDit 的 OnEnter 为 Edit1Enter
设置每个EDit 的 OnEixt 为 Edit1Exit
procedure TForm1.Edit1Enter(Sender: TObject);
begin
TEdit(sender).color:=clRed;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
TEdit(sender).color:=clWhite;
end;
 
果真好用,谢谢!!!!
 
接受答案了.
 
后退
顶部