使用Delphi if语句时遇到困难

时间:2011-01-29 17:46:39

标签: delphi delphi-7

注意:不要编辑此代码的布局! (见下面的答案)

procedure TForm1.ReadCardTimer(Sender: TObject);
begin
ReadCard2(StrToInt(PChar('$' + Form2.Edit1.Text)),1);
ReadCard2(StrToInt(PChar('$' + Form2.Edit3.Text)),2);
ReadCard2(StrToInt(PChar('$' + Form2.Edit2.Text)),3);
ReadCard2(StrToInt(PChar('$' + Form2.Edit4.Text)),4);
ReadCard2(StrToInt(PChar('$' + Form2.Edit5.Text)),5);
ReadCard2(StrToInt(PChar('$' + Form2.Edit6.Text)),6);
ReadCard2(StrToInt(PChar('$' + Form2.Edit7.Text)),7);
ReadCard2(StrToInt(PChar('$' + Form2.Edit8.Text)),8);
ReadCard2(StrToInt(PChar('$' + Form2.Edit9.Text)),9);
ReadCard2(StrToInt(PChar('$' + Form2.Edit10.Text)),10);
ReadCard2(StrToInt(PChar('$' + Form2.Edit11.Text)),11);
ReadCard2(StrToInt(PChar('$' + Form2.Edit12.Text)),12);
ReadCard2(StrToInt(PChar('$' + Form2.Edit13.Text)),13);
ReadCard2(StrToInt(PChar('$' + Form2.Edit14.Text)),14);
if NewValue = 0 then
Image1.Hide;
Image2.Hide;
if NewValue > 0 then
Image1.Show;
Image2.Show;
UpdateCardImage(NewValue,NewValue2,'Image1');
UpdateCardImage(NewValue3,NewValue4,'Image2');
UpdateCardImage(NewValue5,NewValue6,'Image3');
UpdateCardImage(NewValue7,NewValue8,'Image4');
UpdateCardImage(NewValue9,NewValue10,'Image5');
UpdateCardImage(NewValue11,NewValue12,'Image6');
UpdateCardImage(NewValue13,NewValue14,'Image7');
end;

出于某种原因,第二张图片我试图隐藏......不会隐藏......我可以注释掉第一张图片,第二张图片会隐藏这里发生的事情吗?

4 个答案:

答案 0 :(得分:14)

我缩进了代码以反映if语句的含义。希望现在可以清楚地知道发生了什么。我建议您自己开始缩进代码!

procedure TForm1.ReadCardTimer(Sender: TObject);
begin
    ReadCard2(StrToInt(PChar('$' + Form2.Edit1.Text)),1);
    //etc.
    if NewValue = 0 then
        Image1.Hide;
    Image2.Hide;
    if NewValue > 0 then
        Image1.Show;
    Image2.Show;
    UpdateCardImage(NewValue,NewValue2,'Image1');
    //etc.
end;

大概你的意思是:

    if NewValue = 0 then
    begin
      Image1.Hide;
      Image2.Hide;
    end;
    if NewValue > 0 then
    begin
      Image1.Show;
      Image2.Show;
    end;

但是,假设NewValue永远不会消极,那么我会使用Visible属性,这是Show / Hide的简写:

Image1.Visible := NewValue>0;
Image2.Visible := Image1.Visible;

这种声明性方法通常会产生更清晰,更具表现力的代码。此外,它还允许您简明扼要地表达这些控件的可见性紧密相关的事实。

答案 1 :(得分:5)

您需要使用

begin
  Image1.Show;
  Image2.Show;
end;

beginend告诉编译器语句属于一起。在您的代码中,第二个始终显示,而第一个仅在if表达式返回True时显示。

答案 2 :(得分:1)

你为什么使用PChar()?那里没有必要。

答案 3 :(得分:1)

这就是你应该使用代码格式化程序的原因。这样可以很容易地发现问题。