德尔福:如何复制表格

时间:2010-07-08 16:08:03

标签: delphi

我正在尝试复制或“交换”TListBox引用的两种表单。

这是我正在尝试做的事情,但是我收到了一个错误(如下所示):

      cf1 := TCustomform(lstPackages.Items.Objects[origNdx]);
      cf2 := TCustomform(lstPackages.Items.Objects[origNdx - 1]);

      cfTmp.Assign(cf1); //error here: cannot assign TfPackage to a TfPackage
      cf1.Assign(cf2);
      cf2.Assign(cfTmp);

      lstPackages.Items.Exchange(origNdx, origNdx - 1);
      lstPackages.ItemIndex := origNdx - 1;

所以,我正在尝试交换列表项,我需要做一些与表单类似的东西,但是我得到的错误是我无法分配我正在使用的表单类型。 TfPackage是TCustomForm的后代。

我怎样才能完成同样的事情?

1 个答案:

答案 0 :(得分:1)

您不必这样做。 TStrings.Exchange交换对象以及字符串,因此它已经为您处理。相同的表单对象将与相同的字符串保持关联。

编辑:在回复评论时,如果您需要在另一个列表中交换表单的位置,那么这并不困难。当你说:

时,你已经掌握了基本的想法
cfTmp.Assign(cf1);
cf1.Assign(cf2);
cf2.Assign(cfTmp);

但是你不是要复制对象,而是试图将引用交换到它们。对象不是记录。在Delphi中,所有对象变量(包括表单容器中的变量)都是对象的引用(隐藏,隐式指针)。所以你需要做的是:

cfTmp := list[cf1Position];
list[cf1Position] := list[cf2Position];
list[cf2Position] := cfTmp;