为全局变量赋值(Delphi)

时间:2009-08-25 08:58:28

标签: delphi delphi-2006

我正在尝试访问表单数组中的一个全局变量,我尝试过使用它:

max_forms := 3

setlength(form_array, max_forms);

form_array[1] := frm1;
form_array[2] := frm2;

if current_form > 0 then
begin
  form_array[current_form].fNumber := Number;
  form_array[current_form].ShowModal;
end;

以上显然不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我想问题是fNumber有私人访问权限。

根据此字段的用途,一个解决方案可能是创建一个属性以获得写访问权:

property Number: Integer read FNumber write FNumber;

然后你可以完成任务:

form_array[current_form].Number := Number;

关于全球变量:

如果这实际上是问题并且FNumber是您正在谈论的“全局”变量,那么您使用的是错误的单词。 FNumber是一个字段,属于表单。表单成员不是全球性的。

查看表单的来源。如果它是由Delphi IDE生成的,你会在它下面找到一个变量声明:

end; // End of TForm1

var
  Form1: TForm1;

implementation

Form1是一个真正的全局变量,因为它存在于一个单元的界面和任何一个类之外,你可以从任何地方访问(一般来说不是一件好事),就像FNumber你一样首先需要访问表单实例。

PS: 我不知道你到底要做什么,但也许你可以看一下Screen.Forms,它提供了一个活动表格列表。这可能比自定义列表更适合。

答案 1 :(得分:1)

更改您的代码以使用表单的Tag属性...它是一个便笺簿,用于存储整数值...或来自对象的任何内容(.tag:=整数(MyObject))和整数... < / p>

max_forms := 3

setlength(form_array, max_forms);

form_array[1] := frm1;
form_array[2] := frm2;

if current_form > 0 then
begin
  form_array[current_form].Tag:= Number;
  form_array[current_form].ShowModal;
end;