Form上面一个按钮Button何一个Label
procedure TForm1.Button1Click(Sender: TObject);
Label EndShow;
var i,j:Integer;
begin
  PressTimes:=PressTimes+1;
  if PressTimes=1 then
    for i:=1 to 100 do
      begin
        Application.ProcessMessages;
        if PressTimes=2 then begin Break; Goto EndShow end;
        for j:=1 to 10 do
          begin
            Label1.Caption:=IntToStr(j);
            Label1.Update
          end;
EndShow:
  PressTimes:=0;
  ShowMessage('完毕')
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  PressTimes:=0
end;
当我第二次按下按钮时候,用F7跟踪,发现执行了if PressTimes=2 then begin Break; Goto EndShow end;以后(已经出现提示框:完毕),程序还在继续执行内层循环for j:=1 to 10,这是为什么呢?Break不是已经退出来最外层循环了吗?

解决方案 »

  1.   

    少了一个endfor i:=1 to 100 do
          begin
            Application.ProcessMessages;
            if PressTimes=2 then begin Break; Goto EndShow end;
            for j:=1 to 10 do
              begin
                Label1.Caption:=IntToStr(j);
                Label1.Update
              end;
          end; //<---少了这个
      

  2.   

    呵呵,我傻了,if PressTimes=2 then begin 
    Break;                         //<---这个break直接将控制转移到外层,并不会执行
                                    //下一句goto EndShow
    Goto EndShow 
    end;
      

  3.   

    if PressTimes=2 then Goto EndShow;试试。但还是要说一句,尽量不要使用goto语句