procedure TForm1.Button1Click(Sender: TObject);
var
Count: Integer; // 錯誤:局部變量,每次點擊重置為 0/隨機值
begin
if Edit1.Text <> '123' then begin
Inc(Count);
if Count >= 3 then Application.Terminate;
end;
end;
`var Count: Integer` 定義在過程內部,屬於**局部棧變量**,每次調用 `Button1Click` 都會重新分配、未初始化 (隨機值),計數永遠不生效。
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FLoginFailCount: Integer; // 類字段,隨 Form 實例生命周期
public
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FLoginFailCount := 0; // 初始化
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text <> '123' then begin
Inc(FLoginFailCount);
ShowMessage(Format('密碼錯誤,還有 %d 次機會', [3 - FLoginFailCount]));
if FLoginFailCount >= 3 then begin
ShowMessage('錯誤達 3 次,程序退出');
Application.Terminate;
end;
end else begin
FLoginFailCount := 0; // 登錄成功重置
// 進入主界面...
end;
end;
「計數器歸屬 Form,初始化在 Create,邏輯在 Click」,Delphi 登錄限制即刻生效。