使用Integer值作为参考

Bia*_*nca 0 delphi integer

我想根据我从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上.我在这里做错了什么?

ang*_*son 7

您的范围重叠,值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)


Sir*_*ufo 6

而不是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)