2

我只是好奇为什么您可以将 aTSQLConnection放在表单上,​​它会将属性添加Left到:Top.dfm

object Form1: TForm1
  ...
  object SQLConnection1: TSQLConnection
    Left = 8
    Top = 8
  end
end

但是当您在代码中创建它时,LeftandTop属性不是TSQLConnection该类的成员:

interface

type
  TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FSQLCon: TSQLConnection;
  public
    { Public declarations }
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FSQLCon := TSQLConnection.Create(Self);
  FSQLCon.Left := 280;
  FSQLCon.Top := 200;
end;

编译:

[DCC Error] Unit1.pas(30): E2003 Undeclared identifier: 'Left'
[DCC Error] Unit1.pas(31): E2003 Undeclared identifier: 'Top'

为什么有些属性只能在.dfm? 您不应该能够分配.pas在表单 ( .dfm) 中设置的代码 ( ) 中的所有属性吗?

仅供参考 - 使用 Delphi XE2(更新 3)

4

1 回答 1

5

TComponent的属性Left和属性Top实际上并不存在。ReadProperty在和使用的 DefineProperties 中为设计器设置WriteProperties

看看classes.pas。

于 2013-05-29T06:17:08.920 回答