for j:= 0 to PanelM.ControlCount -1 do
begin
if PanelM.Controls[j] is TLabel then ((PanelM.Controls[j]) as TLabel).OnClick := OnMyClick;
if PanelM.Controls[j] is TEdit then ((PanelM.Controls[j]) as TEdit).OnClick := OnMyClick;
if PanelM.Controls[j] is TButton then ((PanelM.Controls[j]) as TButton).OnClick := OnMyClick;
if PanelM.Controls[j] is TPanel then ((PanelM.Controls[j]) as TPanel).OnClick := OnMyClick;
if PanelM.Controls[j] is TyMeter then ((PanelM.Controls[j]) as TyMeter).OnClick := OnMyClick;
end;简而言之,就是将PanelM上所有控件的点击响应设定为OnMyClick,当然,上面的代码是可以实现的,但是PanelM上面控件类型太多,且不可预料,完全是堆砌代码了。所以求一个简短的代码。
begin
if PanelM.Controls[j] is TLabel then ((PanelM.Controls[j]) as TLabel).OnClick := OnMyClick;
if PanelM.Controls[j] is TEdit then ((PanelM.Controls[j]) as TEdit).OnClick := OnMyClick;
if PanelM.Controls[j] is TButton then ((PanelM.Controls[j]) as TButton).OnClick := OnMyClick;
if PanelM.Controls[j] is TPanel then ((PanelM.Controls[j]) as TPanel).OnClick := OnMyClick;
if PanelM.Controls[j] is TyMeter then ((PanelM.Controls[j]) as TyMeter).OnClick := OnMyClick;
end;简而言之,就是将PanelM上所有控件的点击响应设定为OnMyClick,当然,上面的代码是可以实现的,但是PanelM上面控件类型太多,且不可预料,完全是堆砌代码了。所以求一个简短的代码。
begin
if PanelM.Controls[j] is TControl then ((PanelM.Controls[j]) as TControl).OnClick := OnMyClick;
end;
1: type TCrackControl = class(TControl);
(.... as TCrackControl ).OnClick := OnMyClick;
2: 用RTTI GetXProperty SetXProperty 之类的东东
for j:= 0 to PanelM.ControlCount -1 do
begin
PanelM.Controls[j].OnClick := OnMyClick;
end;
否则,试一试getmethod('OnClick')之类的做法
大多数的都是从TControl来的,都有OnClick事件,所以不用再分的很细,特别的就特别处理,比如:for j:= 0 to PanelM.ControlCount -1 do
begin
if PanelM.Controls[j] is TyMeter then ((PanelM.Controls[j]) as TyMeter).OnClick := OnMyClick
else
TControl(PanelM.Controls[j]).OnClick := OnMyClick;
end;
好像7楼的第2种办法有点靠谱。。
而用7L的第一种方法就可以了