public
    { Public declarations }
    oldList: TStringList;
    newList: TStringList;
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  oldList := TStringList.Create;
  oldList.Add('1');
  oldList.Add('2');
  oldList.Add('3');
end;procedure TForm1.btn1Click(Sender: TObject);
begin
  mmo1.Lines.Clear;
  mmo1.Lines.AddStrings(oldList);
end;procedure TForm1.btn2Click(Sender: TObject);
begin
  mmo1.Lines.Clear;
  newList := oldList;
  newList.Delete(0);
  mmo1.Lines.AddStrings(newList);
end;如上代码所示, newList改变,oldList也会改变,有没有办法避免?

解决方案 »

  1.   

    newList := oldList;
    这种方式实际上是内在指针赋值,结果当然是一样的了
      

  2.   

    你最大的问题在于
    newList := oldList;
    这一句执行后,两个对象就是一个东东了
    你要理解Delphi的对象,它只不过相当于C++的对象指针,所以你这种操作是不对的
    如果要复制其中的内容,应该用newList.text:=oldList.text;
      

  3.   

    newList在窗体创建时也要创建
    复制用
    newList.Assign(oldList);

    newList.text:=oldList.text;
    -------------------------------------------------------
    本回复由大傻的破玩意儿【CSDN's forum Explorer】完成!
    软件功能强大,速度超快!!支持中...
    软件下载地址:http://CoolSlob.ys168.com
      

  4.   

    再问xzhifei,
    对其他类型的变量,比如integer,为什么不存在这样的问题呢?