因为 引用 CheckBox1不要 双击后,出现 0的Edit显示 所以,去掉 dgEditing
1 | DBGrid1 . Options:= DBGrid1 . Options-[ dgEditing]; |
所有DBGrid1的Editor控件,事件 都 要自己写,包括 默认Edit
procedure TForm13.DBGrid1ColExit(Sender: TObject); // 退出 时,不显示 编辑 控件 begin if DBGrid1.SelectedField.FieldName = 'aedit' then edit1.Visible := False; end; //============================================================= === procedure TForm13.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const CtrlState: array [Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); // CheckBox1 列 要用到的 begin if (gdFocused in State) then begin if (Column.Field.FieldName = 'aedit') then with edit1 do begin Left := Rect.Left + DBGrid1.Left + 1; Top := Rect.Top + DBGrid1.Top + 1; Width := Rect.Right - Rect.Left + 2; Width := Rect.Right - Rect.Left + 2; Height := Rect.Bottom - Rect.Top + 2; edit1.Text:= Column.Field.AsString; // 数据 传给 Edit1 Visible := True; end; end; end; //============================================================= === procedure TForm13.DBGrid1KeyPress(Sender: TObject; var Key: Char); // 将 DBGrid1的键盘 信息传 给 edit1 begin if (Key = Chr(9)) then Exit; //TAB 键 直接退出 //==============================edit1===================================== if (DBGrid1.SelectedField.FieldName = 'aedit') then begin edit1.SetFocus; SendMessage(edit1.Handle, WM_Char, word(Key), 0); end; end; //===================================================== procedure TForm13.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (Key = Chr(13)) then begin edit1.Visible := False; DBGrid1.DataSource.Edit; DBGrid1.SelectedField.Value := edit1.Text; FDQuery1.Post; end; end; //===========================================================
分类:
Delphi原生DBGrid学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律