我必须解决下一个问题:
表格23:
public
{ Public declarations }
FormsArray : array of TForm24;
end;
Procedure Create_form;
begin
SetLength(FormsArray, Length(FormsArray)+1);
FormsArray[Length(FormsArray)-1] := TForm24.Create(Self);
end;
表格24:
public
end;
var
UniqueValue : Array of ShortString;
Procedure Fill_Unique;
var
tmp1 : Longint;
begin
SetLength(UniqueValue, 256);
for tmp1 := 0 to Length(UniqueValue)-1 do
begin
UniqueValue[tmp1] := IntToStr(tmp1);
end;
end;
Procedure OnButtonClick(Sender);
begin
Fill_Unique;
end;
当我有一张Form24表格,并填写了一些值时,就可以了。
当我有两个形式Form24(FormsArray[0]和FormsArray[1]),并且我在一个形式中更改UniqueValue时,那么我有两种形式的值。
即
我创建FormsArray[0]和FormsArray[1]
当我点击FormsArray[0]上的按钮时:
FormsArray[0]-唯一值[…]='1,2,3,4,5,6,7,8,9…';
FormsArray[1]-唯一值[…]='1,2,3,4,5,6,7,8,9…';
当我点击FormsArray[1]上的按钮时:
FormsArray[0]-唯一值[…]='1,2,3,4,5,6,7,8,9…';
FormsArray[1]-唯一值[…]='1,2,3,4,5,6,7,8,9…';
当我将代码更改为:时
表格24:
public
UniqueValue : Array of ShortString;
end;
然后我点击FormsArray[1]上的按钮,然后我有:
FormsArray[0]-唯一值[…]=";
FormsArray[1]-唯一值[…]=";
UniqueValue为空。
我需要在我创建的每个表单Form24中都有独立的数组(在我创建了的每个表单中都有不同的UniqueValue)。
如何做到这一点?我做错了什么?
谢谢你的帮助。
已解决
我在这里写的答案是-1。那就没有解决办法了。搜索自己。
听起来你已经解决了这个问题。让UniqueValue
成为表单类的成员。例如,将它放在类声明的public
部分中。
type
TForm24 = class(TForm)
public
UniqueValue: array of string;
end;
您展示的第一个代码将数组作为全局变量,它当然由表单类的所有实例以及程序中的其他所有实例共享。您可能会感到困惑,认为与表单类在同一文件中声明的任何内容都以某种方式"属于"该类,但如果您这样认为,那就错了。为了使某个东西属于一个类,它应该在该类的内部声明,而不仅仅是在同一个单元文件中的某个地方。
看起来您可能也想让Fill_Unique
和OnButtonClick
也成为表单类的成员。在您展示的代码中,它们是独立的过程,因此它们没有引用应该使用的任何形式。这意味着它们不能引用UniqueValue
,因为它们不知道要在哪个TForm24
实例的字段上操作。
您的UniqueValue
数组是全局声明的,因此多个表单实例将访问内存中的同一个数组。将数组移动到Form类的public
部分可以使该Form的每个实例都有自己的数组,该数组独立于其他Form实例。只需确保删除全局数组即可。