使用Delphi if语句时遇到困难

Bry*_*yan -1 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;
Run Code Online (Sandbox Code Playgroud)

由于某种原因,第二张图片我试图隐藏......不会隐藏......我可以注释掉第一张图片而第二张图片会隐藏在这里发生什么?

Dav*_*nan 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;
Run Code Online (Sandbox Code Playgroud)

大概你的意思是:

    if NewValue = 0 then
    begin
      Image1.Hide;
      Image2.Hide;
    end;
    if NewValue > 0 then
    begin
      Image1.Show;
      Image2.Show;
    end;
Run Code Online (Sandbox Code Playgroud)

但是,假设这NewValue绝不是负面的,那么我会使用Visible属性为Show/ 的简写Hide:

Image1.Visible := NewValue>0;
Image2.Visible := Image1.Visible;
Run Code Online (Sandbox Code Playgroud)

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

  • 请不要*编辑原始问题中的代码.它不太清楚问题的背景究竟是什么.如果您需要指出,只需将代码复制到您的答案中即可. (2认同)

Gol*_*rol 5

你需要使用

begin
  Image1.Show;
  Image2.Show;
end;
Run Code Online (Sandbox Code Playgroud)

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