关于遍历控件的问题(30分)

  • 主题发起人 主题发起人 jhddx
  • 开始时间 开始时间
J

jhddx

Unregistered / Unconfirmed
GUEST, unregistred user!
一个窗体,上面放了一个panel1,panel1上放了些edti1,edit2,edit3....
代码如下:
for i:=0 to panel1.ComponentCount-1do
//这里写panel1不对,要换成form1就正确了
begin
if components is tedit then
tedit(components).Clear;
end;

如上面注释处,为什么写panel1不行呢.. 有时候一个窗体上的控件比较多..而我只需要操作其中一个panel上的控件,如果遍历整个form上的控件..速度会慢..我想知道怎么办呢?
 
for i:=0 to panel1.ComponentCount-1do
//这里写panel1不对,要换成form1就正确了
begin
if panel1.components is tedit then
tedit(panel1.components).Clear;
end;
 
把ComponentCount改为ControlCount
Componets改为Controls
 
TO:kaida
你的方法我试了..如果EDIT直接放在PANEL上就OK...但是我现在是一个大PANEL上放了两个小PANEL...EDIT分别放在小PANEL上...有办法一次性控制两个小PANEL上的所有EDIT吗?
 
TO:轻舞肥羊
这两种写法都可以吧..我试了..效果是一样的
 
要写个函数循环调用,用Controls集合访问子控件
 
把 Panel1 换成 大PANEL 就可以了
 
把 Panel1 换成 大PANEL 就可以了
这样不行..我发现要么写FORM..要么写控件的父级.. 如果中间隔了一级..就控制不住了
 
procedure ClearPanelEditor(Panel: TPanel);
var
i: integer;
begin
for I := 0 to Panel.ControlCount - 1do
begin
if panel.Controls is tedit then
tedit(panel.Controls).Clear
else
if panel.Controls is TPanel then
ClearPanelEditor(TPanel(panel.Controls));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ClearPanelEditor(Panel1);
end;
 
谢谢kaida和轻舞肥羊..辛苦了!
 
后退
顶部