如何让B=A(10)

  • 主题发起人 主题发起人 zqssoft
  • 开始时间 开始时间
Z

zqssoft

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的代码,执行结果为yes,明显的改变B,也改变了A。但我想让B:=A,但不想在改变B时,让A也跟着改变,有什么办法没有?unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } A:TButton; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);var B:TButton;begin A:=TButton.Create(self); A.Parent:=self; A.Top:=10; A.Left:=10; A.Caption:='hello'; B:=A; B.Caption:='yes'; showmessage(A.Caption); B.free;end;
 
INSIDE VCL 482页说明了原因
 
用Move试试看 Move(a,b,a.InstanceSize);但有些东西复制不全
 
还有别的办法吗,我只想让B=A,想改变B时不用改变A的东西。谢谢。
 
你需要的是a的值,不是引用如下修改://B:=A; B.Caption:=A.Caption;
 
建议先弄明白什么是值什么是引用,不然,这样的代码会很不安全楼主提到想要的功能实际上是一个“克隆”的功能我在Delphi中没有找到类似于Java的Clone方法但是Delphi在TPersistent类中提供了一个Assign虚方法,也就是说提供了一个统一的克隆的方式不过这个方法要你自己来补充完成
 
delphi有Clone的
 
A:=TButton.Create(self);B:=Assign(A);
 
楼上是 虚的。
 
可以save成dfm流 再load 原理和assign是一样的
 
Assig是虚的可是在 Tbutton里实现了该方法 A:=TButton.Create(self); B.Assign(A);
 
引用和克隆的问题。引用指向同一个对像,一个改变了,另一个也会跟着变。克隆保存对象的副本,是二个对象,只是这二个对象的内容相等。改变其中的一个对另一个没有任务影响。
 
呵呵,我前面的方法是我理解错了TButton没有覆盖 Assign 我要学习一下。。。
 
后退
顶部