【问题标题】:Delphi passing a multidimensional array through formsDelphi通过表单传递多维数组
【发布时间】:2018-04-16 09:26:22
【问题描述】:

背景:

我有两种形式。在 form1 上创建了一个数组,需要将它传递给 procedureX 的 form2。该数组是字符串数组的数组,并且是动态的。该数组在 procedureX 中使用,然后传回。清除如下:

procedure ProcedureX (var multidimensionalarray:array of string);

错误:

我知道这会带来错误,因为您不能传递多维数组。您得到的错误是: E2029 标识符应为但 'Array' 被发现。来自这个网站:https://blog.spreendigital.de/2016/08/01/pass-a-multidimensional-array-as-a-parameter-with-a-hidden-caveat/我知道你需要创建一个类型。

但是由于我的问题的背景,我有一些问题: - 我会在 form1 或 form2 中创建类型吗? - 如何在表单之间传递类型?

我还没有任何代码,因为我不知道从哪里开始。我是代码新手,真的不知道在哪里看。我知道这个问题已经被问过很多次了,但是因为我的程序在一个表格上,而我的数组在另一个表格上,我不知道该怎么做。

【问题讨论】:

  • 您可以在单独的单元中声明您的类型(例如MyTypes.pas)并将其添加到您的表单单元的uses 子句中以便能够使用它们(uses ..., MyTypes;)。
  • 伟大的思想... :-) 甚至在单位名称上:-)
  • 根据你的 Delphi 版本,你也可以使用通用的TArray<TArray<string>>

标签: arrays delphi


【解决方案1】:

我会在第 3 个单元中定义类型 - f.ex.:

UNIT MyTypes;

INTERFACE

TYPE
  TStrArr    = ARRAY OF STRING;
  TStrArrArr = ARRAY OF TStrArr;

IMPLEMENTATION

END.

然后在 Form1 和 Form2 的单位中使用该单位:

UNIT Main;

INTERFACE

USES ..., MyTypes;

TYPE
  TForm1 = CLASS(TForm)
             .
             .
             .
             PROCEDURE ProcedureX(VAR MultiDimensionalArray : TStrArrArr);
             .
             .
             .
           END;

想法是在需要引用多维数组类型的每个地方都使用 MyTypes 单元(例如,声明该类型的变量或传递该类型的参数)而不是使该单元 ( MyTypes) 依赖于您项目中的任何其他内容。

【讨论】:

  • 完全有效!我已经在你的帖子上打勾了
  • 在现代 Delphi 中,最好使用 TArray<T> 而不是声明定制的数组类型
  • @DavidHeffernan:如果您想向后兼容以前的版本,则不需要。由于 OP 没有指定任何 Delphi 版本,因此我选择生成一个无论使用哪个 Delphi 版本都有效的回复 - 一直追溯到引入动态数组时。
  • 显然如果你想支持旧版本的编译器是没有用的。但如果你想利用泛型等现代特性,那么TArray<T> 显然更可取。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多