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

Delphi 讓 Enter 鍵代替 Tab 切換焦點:支援一般控制項與 DBGrid 導航

     編輯:Delphi

使用者體驗痛點

使用者習慣輸入完帳號按 Enter 移至密碼欄,但預設 Enter 會觸發預設按鈕 (Default 按鈕) 的 OnClick,導致提前送出表單。需攔截 Enter 鍵並轉發為 Tab 行為。

通用實作 (KeyPress 事件)

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then // Enter
  begin
    // 若焦點在 TDBGrid 內,改為欄位間導航
    if ActiveControl is TDBGrid then
    begin
      with TDBGrid(ActiveControl) do
      begin
        if SelectedIndex < FieldCount - 1 then
          SelectedIndex := SelectedIndex + 1
        else
          SelectedIndex := 0; // 循環到第一欄
      end;
    end
    else
    begin
      // 一般控制項:模擬 Tab 移至下一個
      Key := #0; // 吞掉 Enter,避免觸發預設按鈕
      Perform(WM_NEXTDLGCTL, 0, 0);
    end;
  end;
end;

套用方式

  1. 表單 KeyPreview := True,在表單 OnKeyPress 集中處理,或
  2. 各輸入控制項個別指派同一個 OnKeyPress 事件處理器。

進階:排除特定控制項

若某些控制項需保留 Enter 原本功能 (如 Memo 換行、按鈕點擊),可加入判斷:

if (ActiveControl is TMemo) or (ActiveControl is TButton) then Exit;

原理解析

  • Key := #0 將字元設為 NUL,阻止後續處理 (含預設按鈕點擊)。
  • Perform(WM_NEXTDLGCTL, 0, 0) 發送對話方塊導航訊息,等同按下 Tab。
  • TDBGrid.SelectedIndex 控制當前焦點欄位,實現欄位間 Enter 導航。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved