怎样实两个窗体类通过属性引用 急切等待 高手救命(100分)

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

jianjun_kou

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]
TFORMA = class(TFORM) // in unit unitFORMA.pas
property pFormb: TFormB
end

TFORMB = class(TFORM) // in unit unitFORMB.pas
proeprty pFomrA: TFormA
end

怎样实现 上诉引用
 
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FForm2:TForm;
public

published
property Form2:TForm{注意这里是祖先类} read FForm2 write FForm2;
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Self.Form2:=Form2;
end;

end.
---------------------
unit Unit2;

interface

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

type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FForm1:TForm;
public

published
property Form1:TForm{注意这里是祖先类} read FForm1 write FForm1;
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
begin
Self.Form1:=Form1;
end;

end.
这就OK了,呵呵
 
超级牛X 你好,十分感谢你的回复, 在TFormA 或者 TFROMB 中在进行类型转换就可以
调用TFROMB和TFROMA的属性和方法了
十分感谢, 大虾 呀 给你100分
 
呵呵,其实不用类型转换,对象赋值赋的是指针,可以将子孙类的指针赋给祖先类的指针类型,这是Object Pascal比较灵活的地方
 
超级牛X : 具体情况如下
TFORMA= Class(TFROM)
propperty SubForm: TFROM
// 用于调用TFROMB
procedure ReadRecords
virtual
abstract
//
procedure UpdateRecord
virtual;

TFORMB= Class(TFROM)
property InvokForm: TFORM;// 用于记录调用它的 TFROMA
construnctor Create(AOwner: TComponent
AInvokeForm:TFORM);

// TFROMA
TFormA.UpdateRecord;
beign
(SubForm as TFormB).Create(Self.Owner, Self)
end // 需要类型转换

// TFromB.Create
inherited Create(AOwner);
InvokForm:= AInvokeForm;

// TFROMB 的某些过程需要调用 InvokeForm的ReadRecords 方法
// 所以我想需要类型转换 (InvokeForm as TFormA).ReadRecords

还请大虾 看看 怎样不需要类型转换, 如果是这样是不是效率不搞 ;
这样的问题如何更好的解决
 
要调用子孙类的方法,那么就必须进行类型转换,你可以在implementation部分再定义一个子孙类的指针
 
后退
顶部