Hi,
ich erstelle mir eine simple Komponente an das ich über
. Property Container mein Datenobjekt und über
. Property Feldname das Feld des Objekts
anbinden kann.
Ich platziere die Komponente auf einem Formular.
Ich weise der Eigenschaft "Container" mein Objekt zu => wunderbar.
Ich leere die Eigenschaft "Container" wieder und das Eingabefeld verschwindet vom Bildschirm.
Das Auswählen des Eingabefelds aus der Auswahlliste des Objekt-Inspektors wird mit einer Schutzverletzung quittiert.
Wo ist mein Problem?
Delphi-Quellcode:
unit uSftTestEdit ;
interface
uses
SysUtils, Classes, Controls,
, uSftInterface
, uSftDataContainer
, uCustomOBJ
, Variants
, StdCtrls ;
type
TSftTestEdit =
class(TEdit, ISftEditInterface )
private
{ Private-Deklarationen }
fFieldName:
String;
fContainer: tSftDataContainer;
procedure SetContainer(
const Value: tSftDataContainer);
public
{ Public-Deklarationen }
protected
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
published
{ Published-Deklarationen }
Property FieldName :
String Read fFieldName
Write fFieldName ;
Property Container : tSftDataContainer
Read fContainer
Write SetContainer ;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
UserEdit', [TSftTestEdit]);
end;
{ TSftTestEdit }
procedure TSftTestEdit.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (AComponent = fContainer)
and (Operation = opRemove)
then
fContainer :=
nil;
end;
procedure TSftTestEdit.SetContainer(
const Value: tSftDataContainer);
begin
if Assigned(fContainer)
then
begin
fContainer.UnRegister(Self);
fContainer.RemoveFreeNotification(Self);
end;
fContainer := Value;
if Assigned(fContainer)
then
begin
fContainer.FreeNotification(Self);
fContainer.
Register(Self);
end;
end;
end.