-2

我在调用不同形式的类的函数时遇到了麻烦,这个类作为第二类的属性在两个类之间共享

TMyClass = class
private

public
procedure onconnect (...);

end;


TFormA = class(TForm)

MYCLASS : TMyClass;

procedure StartFormB(...)

end;


TFormA.procedure StartFormB(...)
begin

  bForm.MYCLASS := MyClass;

  bForm.Show;

end; 


TFormB = class(TForm)
private
....
FMYCLASS : TMyClass;
public
......
.....
property MYCLASS : TMyClass  read FMYCLASS write FMYCLASS; 

end;

假设 TMyClass 类似于 Indy TCP 服务器,如何在 bForm 中调用类事件过程 onconnect(..) 或 onexecute(..) 函数,只需通过属性访问共享类实例?

这很简单

 aForm : TMyForm;


 aForm.onconnect(...);

此过程链接到类事件过程,但 bForm.FMyClass.onconnect(...)

不起作用,我无法建立到类事件过程的链接......

4

1 回答 1

3

如果问题是如何能够从另一个单元中的类的对象属性调用方法,那么答案是:

  • 确保对象属性被声明为publicpublished
  • 确保该方法被声明为public

然后通过以下方式调用该方法:

begin
  FormA.MyClass.OnConnect();

从您的编辑可以理解,您实际上并没有试图调用该属性,而是它背后的私有字段。故意的,这是行不通的。属性旨在保护它们背后的实际价值。在您的情况下,用于读取属性的访问说明符将编译器直接重定向到私有字段,但它也可能是一个函数。

因此:调用属性 ( MyClass),而不是字段 ( FMyClass)。

于 2013-02-10T21:39:24.923 回答