假如:我现在有20个FORM,名字分别为form1,form2.......form20。在程序运行的时候,我只希望系统显示一个form,其它的form都是隐藏的。例如现在显示的是form1,当我点击相应的button之后,form2会显示出来,而其它的窗体,包括form1都是隐藏的。我想到一个笨方法:procedure TMainForm.Button1Click(Sender: TObject);
begin
form1.show;
form2.hide;
form2.hide;
...........
...........
form20.hide;end;我觉得这个方法有点笨了,要是有20个button,那么,要写20遍类似的代码。要是有更多的form,就会累爬下了,^_^想问问各位,有什么方法能使这个过程简单一些??如何实现的哪???有没有一个统一的方法来实现?如果有,我就可以编写成一个DLL了,:)
begin
form1.show;
form2.hide;
form2.hide;
...........
...........
form20.hide;end;我觉得这个方法有点笨了,要是有20个button,那么,要写20遍类似的代码。要是有更多的form,就会累爬下了,^_^想问问各位,有什么方法能使这个过程简单一些??如何实现的哪???有没有一个统一的方法来实现?如果有,我就可以编写成一个DLL了,:)
呵呵
var
frm : TForm;
begin
frm := TForm(application.FindComponent('Form2'));
frm.Show;
end;procedure TForm1.Button2Click(Sender: TObject);
var
frm : TForm;
begin
frm := TForm(application.FindComponent('Form2'));
frm.Hide;
end;
var
I: Integer;
comp: TComponent;
begin
for I := 0 to Application.componentcount - 1 do
begin
comp := Application.Components[I];
if comp is TForm then
begin
if comp.name = AFormName then
TForm(Comp).show
else
TForm(comp).hide;
end;
end;
end;
在主Form(假设为Form1)里建立一个成员变量 TForm * forms[NumForms];
在Form1的FormShow消息处理函数里增加 赋值定义(注意不能在FormCreate里定义,因为通常Form1在其它Form之前创建).
forms[0]= this;
forms[1]= Form2;
forms[2]= Form3;
forms[3]= Form4; ......
编写一个函数:
void ShowForms(int n)
{
for(int i=0;i<NumForms ;i++)
{
if(i==n)
forms[n]->Show();
else
forms[i]->Hide();
}
}
在按钮消息里,如Button1点击后显示Form2,其它不显示(包括Form1):
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowForms(1);
}
如此即可。注意:要在其它Form里(如Form2)安排返回主Form的代码:如Form2里点击某个按钮后返回:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
ShowForms(0);
}外部函数原型说明就不说了。
像这样:?
var
Form1: TForm1;
Form2: TForm2;
.....
Form20: TForm20;
for I := 0 to Pred(Screen.FormCount) do
Screen.Forms[I].Hide;Form1.Show;