大家帮帮忙。:)
还有:我想用TForm的controls属性访问Form上的控件,谁知道在Controls[]中控件是按什么顺序排列的?是定义的顺序,还是TabOrder的顺序?谢了!
窗体在创建过程中控件是按由低到高的等级创建的.
通常的等级分布为:
无句柄控件(Label,Image,PaintBox......)
有句柄通用控件(Button,Memo,CheckBox,DBGrid.....)
容器类控件(Panel...)
系统类非可视控件(Timer,TrayIcon....)
在多数情况下,窗体中是按上面的等级创建控件,同等级的控件按拖放顺序创建(用创建这个词也许不合适).后创建的控件可以覆盖上先创建的控件.TabOrder是有句柄控件响应Tab键改变焦点用的.非可视控件在设计时处于最上层,在运行时不可见.
Form->Controls只能访问直接放在Form上的TControl的子类,同类控件的顺序与Z-Order有关。
这个问题很好办,阅读下VCL代码自然就会明白了
再想想BringToFront,SendToBack改变的是什么?为什么可以产生这种改变,继续阅读VCL
下载VCL揭密看看,我写的代码,http://www.csdn.net/cnshare/shtm/64.shtm,
Controls中的顺序是按照设计时创建的顺序排列的。容器中的Control不在自身的Controls数组中。
我认为使用以下的代码可以实现楼主的目的:
for(int i=0; i<ComponentCount; i++)
{
if (Components[i]->ClassNameIs(....)
......
}