运行过程中动态创建窗体,就是行不通,请教!(0分)

  • 主题发起人 主题发起人 kmif
  • 开始时间 开始时间
K

kmif

Unregistered / Unconfirmed
GUEST, unregistred user!
在此之前没有关于对form3的说明,然后在form2的button1click中这样做:
form3:=tform3.create(application);
try
form3.SHowModal;
finally
form3.free;
form3:=nil;
end;
结果,form3就是没有显示出来,请教是何原因。另外,动态创建窗体前是否需要对这个窗体进行说明?
 
应该可以显示,是否form3.Visible = False?
>>动态创建窗体前是否需要对这个窗体进行说明?
你用的这个form3,应该是UNIT3里声明的公用变量。
 
当然要定义了!
 
unit3 已有定义,但在form1里调用时是否需另外定义点什么?
 
new分配空间吧
 
如果需要这样的动态创建应该这样写的:
首先在 Unit3 里定义 TForm3 的类方法:
public
class procedure ShowAsModel;
...
end;
然后在实现里这样写:
procedure TForm3.ShowAsModel;
begin
with TFrom3.Create(nil) do begin
try
ShowModel;
finally
Release; // 要用 Release,不能用 Free
end;
end;
end;

调用时使用: TForm3.ShowAsModel 就行了
 
to SupermanTm,

Release和Free有何区别?
 
可以用以下命令试试,在我这里是可以动态创建:
Application.CreateForm(TForm3, Form3);
 
对于类方法(不属于任何实例的方法)只能用Release,这是语法规定的
 
我现在发现了问题所在,就是在动态创建窗体form3时,在onshow事件里,我调用了form3本身的adoconnection
和adoquery.
但,我换个方法,就是在form3里调用form1的adoconnection各adoquery,可结果还是一样,
出现“key violation........"

请教各位,动态创建的窗体里如何调用其控件,如listview,button,edit等。
 
form3是动态建立的,在form3里调用form1的adoconnection和adoquery 报"access violation......
 
form3:=tform3.create(application);
form3.parent:=selft;
try
form3.SHowModal;
finally
form3.free;
form3:=nil;
end;
 
form3 :=Tform3.create(application)
try
if form3.ShowModal = mrok then
begin
label1.caption := form3.edit1.text //使用form3中的控件
.....
end;
finally
form3.free;
form3 := nil
end;
 
后退
顶部