このnilを終わるには、私がここで働いていたプロジェクトの継続である: アドバイスが受けciruclar参照の問題を修正しCircular reference issue with Classes which use each other問題:フィールドは
(再び、助けに感謝)。今、私は何か他のものと格闘しています:TcmDataPanel.FObservingDataPanelsは常に終わりがなくなります。 (最初は私はアクセス違反を受けていましたが、それ以上のテストでFObserverは常にゼロだったことが判明しました)。
unit cmTPDataPanelFrame;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cmTPBasePanelFrame, cmTPPanels, nxdb, nxllComponent;
type
TcmTPDataConnector = class;
TcmTPDataPanel = class(TcmTPBasePanel)
Database: TnxDatabase;
Session: TnxSession;
private
FDataConnector: TcmTPDataConnector;
MyNxDataBase: TnxDatabase;
MyNxSession: TnxSession;
MyRefNxDataBase: TnxDatabase;
protected
procedure Disconnect; virtual; abstract;
procedure Refresh; virtual;
procedure Requery; virtual; abstract;
public
procedure Connect;
published
property DataConnector: TcmTPDataConnector read FDataConnector write
FDataConnector;
end;
TcmTPCustomDataConnector = class(TComponent)
private
FDatabase: TnxDatabase;
FObservingDataPanels: TList;
FTableForCategories: TnxTable;
FTableForItemCategoryLinks: TnxTable;
FTableForItems: TnxTable;
procedure SetTableForItemCategoryLinks(const Value: TnxTable);
protected
procedure IterateObservers;
public
constructor Create(AOwner: TComponent);
destructor Destroy; override;
procedure Register(Instance: TcmTPDataPanel);
procedure ReportObservers;
procedure Unregister(Instance: TcmTPDataPanel);
published
property Database: TnxDatabase read FDatabase write FDatabase;
property TableForCategories: TnxTable read FTableForCategories write
FTableForCategories;
property TableForItemCategoryLinks: TnxTable read
FTableForItemCategoryLinks write SetTableForItemCategoryLinks;
property TableForItems: TnxTable read FTableForItems write FTableForItems;
end;
TcmTPDataConnector = class(TcmTPCustomDataConnector)
end;
var
cmTPDataPanel: TcmTPDataPanel;
implementation
===と===
{
*************************** TcmTPCustomDataConnector ***************************
}
constructor TcmTPCustomDataConnector.Create(AOwner: TComponent);
begin
ShowMessage('TcmTPCustomDataConnector.Create entered.');
// inherited Create(AOwner); // TODO : check duplicate
FObservingDataPanels := TList.Create();
end;
destructor TcmTPCustomDataConnector.Destroy;
begin
FreeAndNil(FObservingDataPanels);
//inherited Destroy; // TODO : check duplicate
end;
I ShowMessageライン:ここ
は、関連するコード(それはTcmTPDataPanelがTFrameのをdescednentされた状態で、TFrameの単位である)でありますcmTPDataConnectorで実行することを期待しています。作成は表示されません。これは、TcmTPCUstomDataConnectorからCreateメソッドを継承していないと思います。そうではありませんか?
明らかに何かが分かっているような気がするが、私は見ていない。 : - \
つの質問:
1)はなぜFObservingDataPanelsが作成取得されていませんか?
2)「継承されたCreate(AOwner); // TODO:check duplicate」および「// Inherited Destroy; // TODO:check duplicate」行が、ある時点でModelMakerによって挿入されました。コメントを外す必要がありますか?
P.S.明らかに、私はまだコンポーネントの作成と継承について学んでいます。他の入力とアドバイスは大歓迎です。
P.P.S.今日私から多くの質問があります。私がノッチダウンしなければならないかどうか私に知らせてください...(ちょうどボーナスがたくさんの質問の日をここに持っている)。
ご協力いただきありがとうございます! :)
それはそれをしました! :)ありがとうニック! (FWIWもご覧になってください。) – Jamo