delphi - Delphi:如何复制表格

标签 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的后代。

我该如何完成同一件事?

最佳答案

您不必这样做。 TStrings.Exchange交换对象和字符串,因此已经为您解决了。相同的表单对象将与相同的字符串保持关联。

编辑:作为对评论的回应,如果您需要交换表单在另一个列表中的位置,那么这并不困难。您说的是正确的基本概念:

cfTmp.Assign(cf1);
cf1.Assign(cf2);
cf2.Assign(cfTmp);


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

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

关于delphi - Delphi:如何复制表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205662/

相关文章:

delphi - 如何在Delphi中制作一次性定时器功能(如JavaScript中的setTimeout)?

delphi - MsBuild重置库路径

delphi - 在WinXP和Win7下执行delphi代码的差异。为什么?

unit-testing - 我可以为 dunitx 中命名空间中的所有装置创建一个通用的设置例程吗?

delphi - 属性覆盖

delphi - Indy 的 SMTP 身份验证方法是否会导调用子邮件进入 hotmail 中的垃圾箱?

带接口(interface)的观察者模式中的 delphi AV

delphi - 保留从 beforepost 事件到 afterpost 事件的值

delphi - FireMonkey 中的像素着色器模型 > 2.0

delphi - 从 TDictionary 类中获取所有键作为单个字符串