关于form的create方法的问题(100分)

  • 主题发起人 主题发起人 cool
  • 开始时间 开始时间
C

cool

Unregistered / Unconfirmed
GUEST, unregistred user!
本人除来乍到, 对D妃也是半知半解, 还望各位帮忙!
问题如下:
在应用程序中需要生成form1的多个实例(如MDI应用程序中的MDICHILD
form),在每个实例中通过事件激发再生成form2的实例,
我想让生成的form2实例与生成它的form1相关联,这样
在form2实例的事件程序中我需要知道是谁生成了它,如何对其操作。
比方我想在form2实例的click事件中关闭生成它的form1实例,
怎么办?
 
创建Form可如此做:
Var
Form1: TForm;
begin
Form1 := TForm.Create(Self);
....
Form1.ShowModel;
........
Form1.Free;
end;
 
具体没做过,提一点想法。
在生成form2时,把它的parent设为生成它的form1不应行了。
 
type
TForm2 = Class(TForm)
....
private
FCallingForm : TForm;
// 保存调用create的form
public
Constructor Create(AOwner: TComponent);
override;
procedure Notification(AComponent: TComponent;
Operation: TOperation);
override;
end;

implimentation
constructor TForm2.create(AOwner: TComponent);
begin
if AOwner is TForm then
begin
inherited create(AOwner.Owner);
FCallingForm := AOwner as TForm;
end
else
begin
inherited Create(AOwner);
FCallingForm := nil;
end;
end;

procedure TForm2.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = FCallingForm) and (Operation = opRemove) then
FCallingForm := nil;
end;
end.
 
"比方我想在form2实例的click事件中关闭生成它的form1实例,"
我以为如果你说的关闭指的是free的话,那末这是不可能的,
不知其它大虾有何稿件?
 
fx, 谁说不可能?
form1中生成的form2, 它的owner我为什么一定要指为form1?
form2完全可以是form1的sibling.
 
eYes:
那你在form1中如何创建form2并显示呢?
 
fx, 望上面看.
不过notification方法估计没什么用, 懒得研究源程序, 姑且拿来凑数的(主要是为
form1.free之后form2能知道, 省得在form1.free之后再去调用form1的方法).
 
用(form2.owner as tform1)即可. 当然此时不能在form2中关闭form1.
 
多人接受答案了。
 
后退
顶部