【问题标题】:Using Object Orientated subclasses in a separate form以单独的形式使用面向对象的子类
【发布时间】:2020-08-07 17:09:16
【问题描述】:

我创建了一个工厂单元,其中包含用于不同功能的多个子类。

工厂单位

//parent 
type
 TfactoryU = class(Tobject)
 public
 constructor create;
 end;

 //subclass 1
 TFormPosition = class (TfactoryU)
 private
 fFormName:tform;
 public
 constructor create (formName:tform);
 procedure centerForm(frm:tform);
 end;

implementation

{ TfactoryU }

constructor TFormPosition.Create(formName:tform);
 begin
   Inherited Create;
   fFormName:=formname;
 end;

procedure TFormPosition.centerForm(frm:tform);
begin
  frm.Left := (Screen.Width - frm.Width) div 2;
  
frm.Top := (Screen.Height - frm.Height) div 2;

end;

constructor TfactoryU.create;

begin

end;

但是,我不知道如何从不同的单元调用子类过程。

主单元

procedure TfrmMERCH.FormActivate(Sender: TObject);

var

objfactoryU:TfactoryU;

begin

objfactoryU:=tformposition.create(frmmerch);

objfactoryU.centerForm(frmmerch);        

过程centerForm的调用是红色下划线的。

【问题讨论】:

  • 您提到有下划线,但不可见,请使用正确的格式编辑您的问题,或在代码中添加 cmets 以表明您的参考

标签: oop subclass delphi-2010


【解决方案1】:

centerForm() 不是TfactoryU 的成员,这就是为什么在尝试通过TfactoryU 变量调用它时会出错。您需要使用类型转换来达到它,例如:

procedure TfrmMERCH.FormActivate(Sender: TObject);
var
  objfactoryU: TfactoryU;
begin
  objfactoryU := tformposition.create(frmmerch);
  tformposition(objfactoryU).centerForm(frmmerch);

但是,由于 objfactoryU 的声明和对 centerForm() 方法的调用都在同一个过程中,因此您只需更改声明即可:

procedure TfrmMERCH.FormActivate(Sender: TObject);
var
  objfactoryU: tformposition;
begin
  objfactoryU := tformposition.create(frmmerch);
  objfactoryU.centerForm(frmmerch);

【讨论】:

    猜你喜欢
    • 2014-01-03
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多