一个自定义的结构体作为属性时是不是不能这样定义属性: property aa:Taa read get_aa write set_aa? ( 积分: 50 )

  • 主题发起人 主题发起人 am2001
  • 开始时间 开始时间
A

am2001

Unregistered / Unconfirmed
GUEST, unregistred user!
我这样定义没法赋值进去
 
我这样定义没法赋值进去
 
完全可以。 不知你怎样赋值的?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
Taa = record
a0: Integer;
a1: String[50];
end;

type
TxxInfo = class(TObject)
private
Faa: Taa;
function Get_aa: Taa;
procedure Set_aa(Value: Taa);
public
published
property aa: Taa read Get_aa write Set_aa;
end;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a: TxxInfo;
begin
a := TxxInfo.Create;
with a.aa do
begin
a0 := 1;
a1 := 'ddddd';
end;
showmessage(a.aa.a1);
a.Free;
end;

{ TxxInfo }

function TxxInfo.Get_aa: Taa;
begin
Result := Faa;
end;

procedure TxxInfo.Set_aa(Value: Taa);
begin
Faa := Value;
end;

end.
 
以上这样showmessage(a.aa.a1);时是空的
 
因为楼主没有给a的aa属性赋值

procedure TForm1.Button1Click(Sender: TObject);
var
a: TxxInfo;
b:taa;
begin

b.a0:=1;
b.a1:='ddddd';

a := TxxInfo.Create;

// with a.aa do //这是绕过属性直接赋值
// begin
// a0 := 1;
// a1 := 'ddddd';
// end;

a.aa:=b; //这才是通过set_aa是给a.aa属性赋值

showmessage(a.aa.a1);
a.Free;
end;

qingjiafen xiexie
 
知道了,谢谢 kinneng
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部