怎樣根據一個字符串(如:'Form1'),來create相應的窗體(得到:Form1.Create)(200分)

  • 主题发起人 主题发起人 chen_niao
  • 开始时间 开始时间
var
AForm: TForm;
begin
AForm := (Application.FindComponent('Form1') as TForm).Create(nil);
AForm.ShowModal;
...
AForm.Free;
end;
 
以前讨论过,不行的。
 
我来学习
 
不行,出贼。
 
AForm := (Application.FindComponent('Form1') as TForm).Create(nil);
這種方式應該不行吧,在Form.create之前,根本就Find不到它.
 
有难度。
 
这个问题很不明确,form1是一个变量,tform1是个类型,
你是想根据名为tform1的类生成实例,还是想把form1实例化?
不过无论是哪一种,我都倾向于认为不可能.
如wjiachun所说,也许这里以前就讨论过.

你的需求是什么,不妨说一下.
 
先声明一个窗体数组,建立一个对应查找关系,例如用到
FORM1时就查form[1]。

行吗??
 
你要实现什么功能?
 
试试下面:
procedure TForm1.FormClick(Sender: TObject);
var
AForm: TForm;
begin
Aform.Name:='Form3';
Aform.Caption:='test';
AForm:=TForm.Create(nil);
AForm.ShowModal;
AForm.Free;
Aform:=nil;
end;
 
没明白意思,起哄。
 
我已經定了幾個類:TForm1,TForm2,TForm3等等,
現在我想通過輸入的字串,'Form1'或'Form2'或'Form3'來建立相應的窗體
關於,實際需求,實在是難於描述
 
function CreateMyForm(s: string): TForm;
begin
Result := nil;
if pos('Form1',s) >0 then begin
Result := TForm1.Create(Self);
exit;
end else if pos('Form2',s) >0 then begin
Result := TForm2.Create(Self);
exit;
end;
end;

起哄^-^
 
康夫:我非常感激你能幫忙給我出謀劃策,但是遺憾的是,我有四十多個類似TForm1的窗體,你不會讓我寫四十條if..else 語句吧
 
对于TLabel,TImage之类的东西,下面的语句是可以的,但是对于TForm没试过

procedure TForm1.CreateMyComponent(s: string);
var
lComponentClass: TComponentClass;
lComponent: TComponent;
begin
lComponentClass := TComponentClass(GetClass(s));
lComponent := lComponentClass.Create(Self);
TControl(lComponent).Parent := Form1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterClasses([TLabel, TImage]);
CreateMyComponent('TLabel');
CreateMyComponent('TImage');
end;
 
唉!康夫的办法真好,我真是没有调查瞎发言.

顺便问一句,getclass,...是Delphi一直有的吗?
 
我觉的是不行的?
前面的方法用过,不管用!
 
procedure TForm2.Button4Click(Sender: TObject);
var Form: TForm; C: TPersistentClass;
begin
C:=GetClass(Edit1.Text);
if Assigned(C)
then begin
try
Application.CreateForm(TComponentClass(C), Form);
Form.Show;
except

end;
end;
end;

initialization
RegisterClasses([TForm1, TForm2]);
 
时间太久,强制结束。 wjiachun
 
后退
顶部