Delphi 正在注册自定义TClientDataSet,但我没有看到在构造函数中创建的字段

Delphi 正在注册自定义TClientDataSet,但我没有看到在构造函数中创建的字段,delphi,ide,dataset,custom-component,Delphi,Ide,Dataset,Custom Component,我创建了一个自定义TClientDataset,然后将其注册为设计时组件 TMyDataset = class(TClientDataset) public constructor Create(AOwner : TComponent); override; end; 在Create方法中,我创建了这个数据集的字段 implementation constructor TMyDataset.Create(aOwner : TComponent); var lField : TString

我创建了一个自定义TClientDataset,然后将其注册为设计时组件

TMyDataset = class(TClientDataset)
public
constructor Create(AOwner : TComponent); override;
end;
在Create方法中,我创建了这个数据集的字段

implementation

constructor TMyDataset.Create(aOwner : TComponent);
var
  lField : TStringField;
begin
  inherited Create(aOwner);
  lField := TStringField.Create(Self);
  lField.FieldName := 'NAME';
  lField.Dataset := Self;
  Fields.Add(lField);      
end;
将组件注册为该组件时

procedure Register;
begin
RegisterComponents('Queries', [TMyDataset]);
end;
将TMyDataset放到表单上,我在这个数据集的Fields集合中看不到NAME字段

我的目标是定义和注册这些预定义查询,以便在设计时使用它们

我想阻止任何使用此组件的人重新定义此数据集的字段,但仍然能够在可视化编辑器中看到它们以绑定cxGrid或自动创建列等

此外,此数据集只是另一个数据集的占位符。它只用于将字段集合呈现给可以绑定到它们的其他可视化编辑器

我的问题是:

为什么我不能在可视化编辑器中看到我在构造函数中创建的字段,以及如何使其可见

我如何重写组件的行为,从而永远不会将其TField上的用户修改保存到DFM中


谢谢

以下内容对我来说很好,包括显示在TMyDataSet字段编辑器中的NAME字段:

uses
  SysUtils, Classes, DB, DBClient;

type
  TMyDataSet = class(TClientDataSet)
  private
    FMyStringField : TStringField;
    function GetMyStringField: TStringField;
  protected
  public
    constructor Create(AOwner : TComponent); override;
    property MyStringField : TStringField read GetMyStringField;
  published
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Data Access', [TMyDataSet]);
end;

{ TMyDataSet }

constructor TMyDataSet.Create(AOwner: TComponent);
begin
  inherited;
  FMyStringField := TStringField.Create(AOwner);
  FMyStringField.FieldName := 'NAME';
  FMyStringField.Size := 80;
  FMyStringField.DataSet := Self;
end;

function TMyDataSet.GetMyStringField: TStringField;
begin
  Result := FMyStringField;
end;
您应该能够轻松地确定代码需要如何修改才能以类似的方式工作。您忽略了StringField的大小


[tbc]

谢谢,我认为字段的所有者必须是数据集的所有者,这就是我修改代码时所起的作用。你知道如何防止用户修改DFM吗?阻止添加/修改字段?阻止修改。。。不是随便说说,但我觉得@SertacAkyuz对我这个问题的回答可能与此有关,而且Delphi抱怨使用我的代码时出现了重复的名称字段: