我目前在使用Delphi中的记分板时遇到问题。
我有一系列形式是个别问题。 如果问题得到正确回答,则得分为1.否则得分为-1。
目前在我的记分牌上,我有12个标签,其中11个包含每个表格的分数。 我想要做的是在每个标签中加上数字,并将最终得分输出到第12个标签。
有没有办法做到这一点? 任何帮助将不胜感激。
答案 0 :(得分:11)
您应该仅使用UI来显示您的值。
对于使用您的数据的工作,您应该使用适当的数据结构:数组,列表等。
使用数组的示例:
var
Scores[0..10]: Integer;
Sum: Integer;
procedure CollectData;
var
i: Integer;
begin
Scores[0] := ...;
//...
Scores[10] := ...;
Sum := 0;
for i := Low(Scores) to High(Scores) do
Sum := Sum + Scores[i];
end;
procedure DisplayData;
begin
Label1.Caption := IntToStr(Scores[0]);
//...
Label11.Caption := IntToStr(Scores[10]);
Label12.Caption := IntToStr(Sum);
end;
答案 1 :(得分:3)
不是那么整洁的解决方案:
SumLabel.Caption:= IntToStr(StrToIntDef(Label1.Caption,0)+ StrToIntDef(Label2.Caption,0)+ ...);
答案 2 :(得分:2)
虽然我认为@ DR的回答是正确的,而且@ Ritsaert是有帮助的,但这是另一种选择。
您的标签组件将具有“TAG”属性 - 您可以将其用于您自己的目的,在您的情况下,我只需在设置标题的同时设置TAG属性。
这背后的优势在于你可以将标题格式化为包含多个简单数字(如果你愿意),而且你只是总结标签(已经是整数而不需要你做额外的在StrToIntDef调用后工作)。实际上,您正在关注@ DR关于将值保留在GUI之外的观点(在某种意义上),您在每个标签中使用存储字段。
例如
设置分数时; -
Label1.Caption:=Format('%d point',[FScore]);
Label1.Tag:=FScore;
并在总结时; -
FSum:=Label1.Tag + Label2.Tag + Label3.Tag (etc)