我在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;
这在另一个名为'dialog'的单元中:
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;
但它仍然不起作用..仍显示零。
EDIT2:
我觉得每个答案都说不同,我很困惑......
EDIT3:这就是在Form1中操纵'cas'的方式
procedure TForm1.Timer3Timer(Sender: TObject);
begin
cas:=cas+1;
Form1.Label5.Caption:=IntToStr(cas);
end;
发现它!
咩。我想出问题出在哪里 我在Form2 Create而不是Show上分配标签标题,所以当然它们在0>。>
答案 0 :(得分:1)
在您的原始问题中,您在对象中声明了一个字段,并且您认为它是全局的,也许?
unit unit1;
interface
uses Stuff;
type
TForm1 = class(TForm)
public
THisIsAFieldInAnObject:Integer;
end
var
ThisIsAGlobal:Integer;
implementation
uses OtherStuff;
...
注意上面放置全局变量的位置。全局变量不是类中的字段。你把东西放在哪里,当你编写代码时称为“你所处的上下文”。在类声明中,像public
这样的东西作为可见性说明符是有意义的。它不会使事物变得全局,它使它们对类的用户可见。
要访问全局,请将其作为unitName.VariableName访问,并且不要忘记将“使用unitName”添加到其他单元。
更新您现在正在正确访问全局变量,但它不包含您期望的值。这就是我们开始调试的地方。在设置变量的位置以及将其更改回的任何其他位置设置断点。现在在读取变量的位置设置断点。我发现变量写入在实际发生时效果更好,并且当它们没有被后续写入相同位置的过度写入时,包含不同的值。变量就像一个包含数字的盒子。写入它的零件(你认为被调用的代码没有被调用)或写入它的两件事(你认为应该存在的东西但不存在因为第二个写入第一个值)是你的排序的常见来源混乱。
答案 1 :(得分:1)
您有一个全局变量: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
引用该字段。
答案 2 :(得分:1)
在Label10.Caption:=IntToStr(kolecka.cas);
上,您实际上正在阅读单位cas
的{{1}}全局变量,而不是kolecka
的变量。
在第一种情况下,您可能会在调用Form1
后尝试操纵Form1.cas
。请注意,在您关闭显示为Form2.ShowModal
的表单之前,不会执行ShowModal调用后的代码。
<强>更新强>
看来你正在操纵单位的ShowModal
变量,而不是形式的变量。我完全不知道Delphi如何处理这个案子。但明确指出您正在操纵哪个cas
实例是一个好习惯。使用此代码:
cas
答案 3 :(得分:0)
我要检查的第一件事是你是否只有一个名为Form1的变量。
我最好的猜测是你有1个单位Unit1
(声明TForm1)和单位Kolecka
中的1个,但这只是一个假设。