function TForm1.CreateForm(FClass: string):Tform;
var
fCls:TformClass;
begin
fCls:=TformClass(GetClass(fClass));
Application.CreateForm(fCls,result);
end;
procedure TForm1.Button1Click(Sender: TObject);
var str:string;
begin
str:='t'+Edit1.Text;
CreateForm(str).Show;
end;
(在每个被调用单元:
initialization
RegisterClass(TForm2);)这段代码可以实现动态调用form,但是不能解决Form之间的变量传递问题,
比如:edit1.text := From2.edit1.text(Form2.bl);
麻烦高手解决。
var
fCls:TformClass;
begin
fCls:=TformClass(GetClass(fClass));
Application.CreateForm(fCls,result);
end;
procedure TForm1.Button1Click(Sender: TObject);
var str:string;
begin
str:='t'+Edit1.Text;
CreateForm(str).Show;
end;
(在每个被调用单元:
initialization
RegisterClass(TForm2);)这段代码可以实现动态调用form,但是不能解决Form之间的变量传递问题,
比如:edit1.text := From2.edit1.text(Form2.bl);
麻烦高手解决。
解决方案 »
- 应该怎么做呀!!!!!
- 非高手莫入!sql问题
- web service的问题
- 简单问题,怎么判断是Access97还是Access2000文件?
- 敬请关注,绝对精华贴!!!
- 100分求助,怎样将TstringGrid中的内容保存到Word中,并有同样的表格形式,fixedcols:=1,fixedrows:=1时,怎样让其中的,某一行的第一行
- 关于webbrowser,在线等回复
- 高分求 GSM610 语音压缩标准算法
- 在下有个小问题请各位前辈专家帮忙,进者有分。
- Delphi的Form show出之后
- 帮忙看下代码错在那编译不了啊.
- 如何在打印完40页后停止打印,重新调整后再打印?或者说如何在打印完40页后跳出一个询问语句??
Form1调用Form2时采用以上办法。Form2中正常创建Form3(不用动态调用)
procedure TForm2.Button1Click(Sender: TObject);
begin
application.CreateForm(TForm3,Form3);
Form3.ShowModal;
end;procedure TForm3.Button1Click(Sender: TObject);
begin
edit1.Text := Form2.Edit1.Text;
end;
如Form调用Form2:
form2:=Tform2.create(self);
try
form2.showmodal;
finally
form2.free;
end;
这与高不高手有什么关系啊??你把要做的事说清楚啊
这-->“edit1.text := From2.edit1.text(Form2.bl);” 是个什么东东?语法表达有误?还是我水平太差,看不懂。 edit1.text(form2.bl) 是个什么东东??
kiboisme(还是铁棒.....针)
你试了吗?好使吗。Form没有FindComponent
(form2.bl)指Form2中的一个变量,也就是说:edit1.text的指可以赋予Form2中一个组件的值,也可以是一个变量的值,明白啦?
希望解释的是你的问题。
application.CreateForm(TForm2,Form2);
Form2.ShowModal;
创建,就没有这个问题了
你这里都没有指定创建的实例名,当然你想用实例FORM2来访问的时候就回出错了
但是你用
for i:=0 to Screen.FormCount-1 do
begin
showmessage(Screen.Forms[i].Name);
end;
检查发现Form2已经存在
procedure TForm1.CreateForm(var Form; FClass: string);
var
fCls: TFormClass;
begin
fCls := TFormClass(GetClass(fClass));
Application.CreateForm(fCls, Form);
end;CreateForm(Form2, 'TForm2');
————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
Form的Name是根据数据库中动态取出的,你的CreateForm(Form2, 'TForm2')不行。 我就是不想写很多的创建窗体语句才采用通用函数实现创建窗体的。
怎么不说了?快帮助解决呀
如果有N个窗体,难道你要写N个CreateForm(Form2, 'TForm2');我的设计:从数据库中取出数据放到Treeview,当点击某个节点时,取出节点的字符串放到变量s中,
这个s就是'TForm2'之类的字符串。这样只要在Treeview的Onclick事件中调用即可。
每次记下窗体的index。用的时候用
Tform(list.items[index])来引用窗体应该就可以了
lxpbuaa确实已经实现了你的要求
定义一个TForm实例AForm,设置参数FClass
调用CreateForm(var Form; FClass: string)
CreateForm(AForm,'TForm2')
AForm.ShowModel;这本来就是一个公有函数,Form变量返回了创建好的实例
function TForm1.CreateForm(FClass: string):Tform;
var
fCls:TformClass;
begin
fCls:=TformClass(GetClass(fClass));
Application.CreateForm(fCls,result);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
insex:integer;
begin
str:='t'+Edit1.Text;
index:=list1.add(CreateForm(str));
Tform(list1.item[index]).show;
//然后吧index记到一个地方和你的窗体对应起来
………………
end;
//以后访问
edit1.Text := (Tform(list1.item[index])..FindComponent('Edit1') As Tedtt).Text;程序没调试,不过这个想法应该可以
你那里能解决:变量传递问题?
var
dyForm:TForm:
...............
procedure TForm1.CreateForm(var Form; FClass: string);
var
fCls: TFormClass;
begin
fCls := TFormClass(GetClass(fClass));
Application.CreateForm(fCls, Form);
end;
........................
dyForm:=CreateForm(Form2, 'TForm2');..................
edit1.text :=dyForm.bl;
form2 := self;
应该能达到你的目的吧,不知我理解对了没有
完全正确