如何使一個窗體在需要的時候創建(100分)

  • 主题发起人 shuquanhe
  • 开始时间
S

shuquanhe

Unregistered / Unconfirmed
GUEST, unregistred user!
我不想在程序開啟時就創建那麼多暫時用不到的窗體﹐如何使一個窗體在需要的時候創建﹐
比如我需開啟此窗體時在來創建 。
 
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
Form2: TForm2;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(nil);
form2.show;
end;


type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

希望你能看明白!
 
程序中:
project->option->forms:
将你想要动态加载的forms(以form2为例)从 auto-create-forms 移到 available forms
然后在你的代码中;
Form2:=TForm2.create(Application);
Form2.show;
 
动态创建一个,“好主意”,不过要再加上一些按钮或者其他什么的,我看你会累死!
现在电脑配置好得很,根本不在乎那么一点点速度提高!自己注意减少冗余代码即可!
没实在必要,还是不要去自找苦吃了!
 
对楼上的一点补充:
程序中:
project->option->forms:
将你想要动态加载的forms(以form2为例)从 auto-create-forms 移到 available forms
然后在你的代码中;
创建:
Form2:=TForm2.create(Application);
Form2.show;
关闭:
form2.close;
form2的onclose事件:
cafree;
 
在某些场合下,这种使用方式是必须的,起码是方便的,相反自动创建倒是需要去额外做一些处理!
 
实际上很简单,你有没有使用过类,每次都要创建一个类的实例,使用类的create方法创建
比如
var
sl: TStringList;
begin
sl := TStringList.Create; //在这里创建,然后就可以使用了

实际上窗体也是一个类,动态创建窗体也是一样的
先引用要创建的窗体单元
uses
unit2;

var
Form: TForm2; //声明TForm2类型的对象
begin
Form := TForm2.Create(nil); //创建实例,窗体已经动态创建
Form.Show; //如果你不想隐藏的话
……
Form.Free; //记得要销毁窗体
end;
是不是很简单,要注意的是在菜单project-》option中,把form2选到右边,不然动态创建就
没有意义了
 
to YB_unique
动态创建窗体是有必要的,不单是速度快一点点,也不会占用过多的内存,如果一个
程序有几十,几百个窗体都自动创建的话,对内存和cpu资源都是一种极大的浪费,不符合
时空效率,既浪费了时间又浪费了空间
 
几十,几百个窗体???呵呵!恐怖!
 
几十几百个是很常见的,如果做项目的话,我第一次做的项目,还没完成,就有70多个了
开始做的时候也是自动产生窗体,结果被经理被K了:(
 
不好意思!我只是一个业余爱好者,大型系统工程项目没做过!
动态创建窗体固然是好主意,但有些很复杂的窗体动态创建会徒增难度!
 
非常感謝各位
 
to YB_unique
呵呵,我做的也不是什么大项目,很小的一个项目了,动态创建并不是绝对的,使用次数
频繁的就没有必要动态创建了:)
 
顶部