delphi 如何在ProgressBar达到100%后使Form1消失而Form2自动出现?

niwlg2el  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(126)

我创建了Form1,并在上面放置了一个ProgressBar,它可以通过计时器从1到100%移动,并将以下代码放入其中:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ProgressBar1.Position := ProgressBar1.Position + 1;
  Label1.Caption := IntToStr(ProgressBar1.Position) + ' %';
  if ProgressBar1.Position = 100 then
    Button1.Enabled := True;
end;

定时器的间隔值为50,因此当它变为100%时,按钮激活,当我按下它时,Form2会显示以下代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.ShowModal;
end;

但是我想删除按钮,我希望它在没有按钮的情况下自动发生,这样当程序运行时,Form1出现,ProgressBar从1%移动到100%,然后Form1消失,Form2出现。
我该怎么做?
我试过这个:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ProgressBar1.Position := ProgressBar1.Position + 1;
  Label1.Caption := IntToStr(ProgressBar1.Position) + ' %';
  if ProgressBar1.Position = 100 then
  begin
    Form1.Close;
    Form2.Show;
  end;
end;

但是当执行程序时,它挂起了,我得到了无限的消息(无限循环),我不知道为什么?
解决办法是什么?

acruukt9

acruukt91#

您所显示的代码不应“挂起”应用程序。然而,它确实有几个问题。
最大的问题是你让计时器运行,所以它会连续关闭Form1,每50ms显示一次Form2,因为ProgressBar的Position保持在100。
另外,假设Form1是您的MainForm,那么关闭MainForm将默认终止您的进程。
尝试更像这样的东西:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ProgressBar1.Position := ProgressBar1.Position + 1;
  Label1.Caption := IntToStr(ProgressBar1.Position) + ' %';
  if ProgressBar1.Position = 100 then
  begin
    Timer1.Enabled := False;
    Self.Hide;
    Form2.Show;
  end;
end;

相关问题