-2

異なる形式のクラスの関数を呼び出すのに問題があります。このクラスは、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がIndyTCPサーバーのようなものであると仮定すると、プロパティを介して共有クラスインスタンスにアクセスするだけで、bForm内でクラスイベントプロシージャonconnect(..)またはonexecute(..)関数を呼び出す方法は?

これは簡単

 aForm : TMyForm;


 aForm.onconnect(...);

このプロシージャはクラスイベントプロシージャにリンクされていますが、bForm.FMyClass.onconnect(...)

動作しません、クラスイベントプロシージャへのリンクを構築できません...

4

1 に答える 1

3

別のユニットのクラスのオブジェクトプロパティからメソッドを呼び出す方法が問題である場合、答えは次のとおりです。

  • オブジェクトプロパティがpublicまたはpublishedとして宣言されていることを確認してください。
  • メソッドがpublicとして宣言されていることを確認してください。

次に、メソッドの呼び出しは次のように実行されます。

begin
  FormA.MyClass.OnConnect();

編集すると、実際にはプロパティを呼び出そうとしておらず、その背後にあるプライベートフィールドを呼び出そうとしていることがわかります。それは意図的には機能しません。プロパティは、その背後にある実際の値を保護するように設計されています。あなたの場合、プロパティを読み取るためのアクセス指定子は、コンパイラを直接プライベートフィールドにリダイレクトしますが、それは関数である可能性もあります。

したがってMyClass、フィールド()ではなく、プロパティ()を呼び出しますFMyClass

于 2013-02-10T21:39:24.923 に答える