首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Delphi 登錄界面密碼錯誤限制 3 次:計數器變量作用域錯誤導致不生效,正確聲明於 Form 類字段

     編輯:程式設計綜合問答

常見錯誤代碼

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` 都會重新分配、未初始化 (隨機值),計數永遠不生效。

正確做法:計數器作為 Form 類的私有字段

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;

進階:持久化防繞過 (可選)

  • 將失敗次數、鎖定時間寫入註冊表/配置文件/數據庫,程序重啟後依然生效。
  • 鎖定期內禁用登錄按鈕,顯示倒計時。

避坑口訣

  • 跨事件/多次調用需共享的狀態 → 類字段。
  • 單次邏輯臨時變量 → 局部變量。
  • 初始化放在 `FormCreate`/`OnCreate`**,而非變量聲明處 (Delphi 不支持聲明處初始化)。

「計數器歸屬 Form,初始化在 Create,邏輯在 Click」,Delphi 登錄限制即刻生效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved