我想根据我从Integer获得的值来更改TLabel的字体颜色.
var
i: Integer;
begin
ValueGenerator (i);
if i <= 14 then
begin
L1.Font.Color := clBlue;
end;
if i >= 15 then
begin
L1.Font.Color := clGreen;
end;
if i <= 29 then
begin
L1.Font.Color := clGreen;
end;
if i >= 30 then
begin
L1.Color := clYellow;
end;
if i <= 49 then
begin
L1.Color := clYellow;
end;
if i >= 50 then
begin
L1.Color := clRed;
end;
L1.Caption := IntToStr(i);
end;
Run Code Online (Sandbox Code Playgroud)
值输出从0到100.我得到的任何价值,我的TLabel总是在clGreen上.我在这里做错了什么?
您的范围重叠,值20大于15且小于29,因此它首先设置一种颜色,然后设置另一种颜色,但它们都不会使其余代码不执行.首先你设置clGreen,然后你会遇到i小于49的情况,它会覆盖.
以下是您可能想要编写该代码的方法:
case i of
0..14: L1.Font.Color := clBlue;
15..29: L1.Font.Color := clGreen;
30..49: L1.Font.Color := clYellow;
50..100: L1.Font.Color := clRed;
end;
Run Code Online (Sandbox Code Playgroud)
而不是case我会在这种情况下使用一些堆叠if .. then .. else,所以你不必照顾每种颜色的整个范围,只是为了最大的价值
if i <= 14 then
L1.Color := clBlue
else if i <= 29 then
L1.Color := clGreen
else if i <= 49 then
L1.Color := clYellow
// can easily extended with
// else if i <= 79 then
// L1.Color := clMaroon
else
L1.Color := clRed;
Run Code Online (Sandbox Code Playgroud)