我在 Form1 中有以下代码。
public
{ Public declarations }
cas: integer;
end;
然后我使用该变量,然后我调用另一个表单 Form2.ShowModal;
在 Form2 上,我尝试执行以下操作:Label9.Caption:=Format('%ds',[Form1.cas]);
.但是无论我做什么,在 Form1 中,"cas"被分配了正确的值,但在 Form2 中它总是显示"0"。为什么会这样?
编辑:
现在我在第一个单元中称为"kolecka"这个
var
Form1: TForm1;
barvy: array[1..6] of TColor;
kola: array[1..22] of TShape;
valid: integer;
bezi: boolean;
presnost: real;
skore: integer;
chyb: integer;
kliku: integer;
cas: integer;
在另一个称为"对话框"的单元中:
implementation
uses
kolecka;
{$R *.dfm}
procedure Statistiky();
begin
With Form2 do begin
Label8.Caption:=IntToStr(kolecka.skore);
Label9.Caption:=Format('%ds',[kolecka.cas]);
Label10.Caption:=IntToStr(kolecka.cas);
Label11.Caption:=IntToStr(skore);
Label12.Caption:=Format('%.2f%%',[presnost]);
end;
end;
但它仍然不起作用......仍然显示零。
编辑2:
我觉得每个答案都说了不同的东西,我很困惑。
编辑3:这就是在表单1中操纵"cas"的方式
procedure TForm1.Timer3Timer(Sender: TObject);
begin
cas:=cas+1;
Form1.Label5.Caption:=IntToStr(cas);
end;
找到了!
唉。我弄清楚问题出在哪里。
我在 Form2 Create 而不是 Show 上分配标签标题,所以它们当然是 0>.>
在你最初的问题中,你在一个对象中声明了一个字段,你认为它是一个全局的,也许?
unit unit1;
interface
uses Stuff;
type
TForm1 = class(TForm)
public
THisIsAFieldInAnObject:Integer;
end
var
ThisIsAGlobal:Integer;
implementation
uses OtherStuff;
...
请注意你把全局变量放在上面的位置。全局变量不是类中的字段。你放东西的地方,当你写代码时被称为"你所处的上下文"。在类声明中,类似于 public
的东西作为可见性说明符是有意义的。它不会使事物全局化,而是使它们对类的用户可见。
要访问全局,请将其作为 unitName.VariableName 访问,并且不要忘记将"使用 unitName"添加到另一个单元。
更新 您现在正在正确访问全局变量,并且它不包含您期望的值。这就是我们开始调试的地方。在设置变量的位置设置断点,并在将变量更改回 0 的任何其他位置设置断点。现在在读取变量的位置设置断点。 我发现变量写入在实际发生时效果更好,并且当它们没有被包含不同值的后续写入覆盖时。 变量就像一个包含数字的盒子。写入它的东西为零(你认为被调用的代码没有被调用)或写入它的两件事(你认为应该存在但不存在的东西,因为第二次写入破坏了第一个值)是你这种混乱的常见来源。
您有一个全局变量:kolecka.cas
和一个字段kolecka.Form1.cas
。这些是不同的。
public
{ Public declarations }
cas: integer;//This is the field
end;
var
Form1: TForm1;
cas: integer;//This is the global variable
Label9.Caption:=Format('%ds',[kolecka.cas]);
访问全局变量。
cas
在实例方法中,TForm1
是指字段。
在Label10.Caption:=IntToStr(kolecka.cas);
上,你实际上是在读取单位kolecka
的cas
全局变量,而不是Form1
的全局变量。
在第一种情况下,您可能试图在调用Form2.ShowModal
后操纵Form1.cas
。请注意,在您关闭带有 ShowModal
的表单之前,不会执行 ShowModal 调用后的代码。
更新您似乎正在操纵单位的cas
变量,而不是表单的变量。我完全不知道德尔福是如何处理这个案子的。但是,最好明确指出您正在操作哪个cas
实例。使用此代码:
self.cas := self.cas + 1;
我要检查的第一件事是你是否只有 1 个名为 Form1 的变量。
我最好的猜测是你有 1 个单位 Unit1
(声明 TForm1 的地方)和 1 个单位 Kolecka
,但这只是一个假设。