请问怎样遍历自己程序的所有Form(200分)

  • 主题发起人 主题发起人 element
  • 开始时间 开始时间
var
i:integer;
begin
for i:=0 to Screen.FormCount-1 do
begin
//To do add your code here
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);//新form1_1
begin
try
if myform=nil then
begin
myform:=tform1.Create(application);
myform.Button4.Visible :=false;
myform.Show();
end;
finally

end;
end;
procedure TForm1.Button2Click(Sender: TObject);//释放资源
begin
myform.Free;
myform:=nil;
end;
procedure TForm1.Button3Click(Sender: TObject);//遍历form
var
i:integer;
begin
for i:=1 to application.componentcount-1 do
begin
showmessage(application.components.name);
end
end;
主要是通过隐含的application的componentcount和components属性访问form
以上代码很粗糙,只是演示,先动态创建另一个form在遍历,缺省下有form1和
form1_1.
 
Form1,myform: TForm1;
 
pcexplorer提供的是最直接的方法。


MLXJ的怕是要改一下
for i:=1 to application.componentcount-1 do
if TControl(application.components) is TForm then
begin
showmessage(application.components.name);
//do ur things
end

 
Screen.FormCount不行吗?
为和要创建另一个Form
???
 
呵呵我的老兄已经回答拉?
 
建议使用screen.formcount和screen.forms[]因为在有些情况下,application的component属性无法包括所有所有窗体。不过在有些情况下两者是一样的。上面的例子就一样。
至于加 is Tform1 那要看具体情况,如果对结果了如指掌,那加上判断就是冗余了。这里可以不加。
 
接受答案了.
 
怎么没分呀
 
后退
顶部