如何创建窗体呢?(30分)

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

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
我想动态创建Form

比如我知道Form的name为xxxForm,如何TxxxForm.Create(Application) 呢?
 
Application.CreateForm(TxxxForm, xxxForm);
 
xxxForm := TFxxxForm.Create(Application);
xxxForm.Show;
xxxForm.Free
 
诸位老大,我是要达到这样的目的,系统里的n个Form都通过动态创建,我想写一个创建窗体
的函数,然后我把Form名作为参数传进去,即
procedure Mycreatefrom(formname:String);
begin
formname.Create(Application)
//关键是这句如何写?
end;
 
你的概念错误!

FormName是string型,怎么能Create(Application)出来一个Form呢?
 
那只是例子表明我想要达到的目的,关键是如何实现
 
procedure ShowForm(TForm:TFormClass);
begin
TForm.Create(Application).Show;
end;

ShowForm(TForm_YWCZ);
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var MyForm : TForm;
begin
try
MyForm := TForm.Create(self);
MyForm.Show;
// MyForm.ShowModal;
finally
// MyForm.Free;
end;
end;

end.
 
你把button click里面的作为一个过程写出来就可以了!
 
至于什么时候free就看你自己的呢!
 
procedure MyForm(MyForm:TForm);
begin
//copy code above here
end;
 
to taozhiyu:

你没有理解我的意思。
我的项目里可能有30-50个左右的Form,如果每个菜单项对应一大断代码就太麻烦了
我想能不能通过这样来,各菜单项对应代码只写这么一句:

procedure TJyz_MainForm.N1S1Click(Sender: TObject);
Begin
ShowChildForm(传递Form的名称或别的什么参数);
end;

然后写一个通用的创建函数ShowChildForm,这样以便于减少代码量。
 
to shephard:谢谢你给了我思路
 
后退
顶部