TDBEdit 是 Delphi「Data Controls」頁面核心資料感知編輯元件,用於顯示與編輯資料集當前記錄的指定欄位值。本文系統整理其關鍵屬性、方法與實務應用技巧。
| 屬性 | 用途 | 關鍵說明 |
|---|---|---|
DataSource |
指定資料來源 | 連結 TDataSource 元件,橋接資料集與 UI。必須先設定此屬性,DataField 才能列出可用欄位。 |
DataField |
指定綁定欄位 | 下拉選單顯示 DataSource.DataSet 的所有欄位名稱。設定後,元件自動顯示當前記錄該欄位值。 |
Enabled |
啟用/停用元件 | True:可編輯、可聚焦;False:灰色顯示,禁止輸入與聚焦。常配合資料集狀態動態切換。 |
ReadOnly |
唯讀模式 | True:僅顯示不可修改(但可複製、聚焦);False:可編輯。預設 False。適合顯示主鍵、自動產生欄位。 |
提示:上述四個屬性幾乎是所有資料感知元件(DBGrid、DBMemo、DBComboBox 等)的共同基礎屬性,掌握即可觸類旁通。
以下事件繼承自 TCustomEdit,但在資料綁定情境下語義略有不同:
| 事件 | 觸發時機 | 實務應用建議 |
|---|---|---|
OnChange | 編輯內容變更時 | 即時驗證、啟用「儲存」按鈕、計算衍生欄位。注意:程式修改 Field.Value 也會觸發。 |
OnClick / OnDblClick | 滑鼠單擊/雙擊 | 雙擊可彈出選單、日曆或查詢視窗輔助輸入。 |
OnKeyDown / OnKeyUp | 鍵盤按下/釋放 | 攔截 Enter 跳至下一欄、Esc 取消編輯、F3 開啟查詢等熱鍵。 |
OnMouseDown / OnMouseUp | 滑鼠按鍵按下/釋放 | 實作拖放、右鍵選單顯示座標計算等進階互動。 |
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
DBEdit1.ReadOnly := not (DataSource1.State in [dsEdit, dsInsert]);
DBEdit1.Color := IfThen(DBEdit1.ReadOnly, clInfoBk, clWindow);
end;
procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin // Enter 鍵
Key := #0;
SelectNext(ActiveControl, True, True); // 跳至下一控制項
end;
// 數字欄位限制輸入
if (DBEdit1.DataField = 'Price') and not (Key in ['0'..'9', '.', #8]) then
Key := #0;
end;
// 在 Field 定義時或執行期設定
ADOQuery1.FieldByName('Amount').DisplayFormat := '#,##0.00';
ADOQuery1.FieldByName('BirthDate').DisplayFormat := 'yyyy/mm/dd';
procedure TForm1.DBEdit1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if DBEdit1.DataSource.DataSet.Active then
DBEdit1.Hint := '當前值:' + DBEdit1.Field.Text
else
DBEdit1.Hint := '資料集未開啟';
DBEdit1.ShowHint := True;
end;
DataSource.DataSet.Active = True、DataField 拼寫、欄位是否存在。ReadOnly=False、Enabled=True、資料集處於 dsEdit/dsInsert 狀態、欄位非 pfInKey 且非唯讀。TField.EditFormat 控制編輯模式顯示,DisplayFormat 控制瀏覽模式。TDBEdit 雖屬基礎元件,但搭配 TField 事件、資料集狀態機與驗證邏輯,能構建健壯的資料輸入介面。熟悉其屬性事件互動機制,是 Delphi 資料庫應用開發的必修課。