对于第二个问题:
我个人觉得如果你的Form上的控件不超过万个,而且仅仅是在按钮事件中判断一下,用RTTI的性能影响是可以不计的。
如果实在不想这也许不到一MS的时间的话,你也可以用数组,用数组也不一定需要动态创建,
你可以在Form的OnCreate事件中用一次RTTI,把Form中的所有TCheckBox对象加入到数组中去,
但是这里请注意:,如果你的TCheckBox真的有成千上万个,千万不要在每一加入一个之前改变数组长度,
这样很耗时,你可以先对数组分配长度为Form中控件个数,然后计数,加入完成后把数组长度设成计数结果。
在按钮中用数组,
如果你仅仅是在按钮的事件中用一次数组,这样能节省时间吗,有用吗:
A:Array of TCheckBox;
IDX:Integer;
begin
IDX:=0;
SetLength(A,componentCount);
for i:=0 to componentCount-1 do
begin
if Components is TCheckbox then
begin
A[IDX]:=TCheckBox(Components);
INC(IDX);
end;
end;
SetLength(A,IDX);
end;