如何设置Delphi中TDBGrid的inplace编辑器限制最大文本长度?

2026-04-10 20:102阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计405个文字,预计阅读时间需要2分钟。

如何设置Delphi中TDBGrid的inplace编辑器限制最大文本长度?

在TDBGrid中限制inplace编辑器的最大文本长度,可以通过设置相应属性来实现。以下是一个简化的示例:

pascalprocedure TInplaceEdit.UpdateContents;begin Text :=''; EditMask :=Grid.G'';end;

如何在TDBGrid中限制inplace编辑器的最大文本长度? (德尔福柏林)

数据类型是Float.

TDBGrid中的inplace编辑器将通过调用更新其内容

procedure TInplaceEdit.UpdateContents; begin Text := ''; EditMask := Grid.GetEditMask(Grid.Col, Grid.Row); Text := Grid.GetEditText(Grid.Col, Grid.Row); MaxLength := Grid.GetEditLimit; end;

GetEditMask的实现方式如下:

function TCustomDBGrid.GetEditMask(ACol, ARow: Longint): string; begin Result := ''; if FDatalink.Active then with Columns[RawToDataColumn(ACol)] do if Assigned(Field) then Result := Field.EditMask; end;

和GetEditLimit像这样:

function TCustomDBGrid.GetEditLimit: Integer; begin Result := 0; if Assigned(SelectedField) and (SelectedField.DataType in [ftString, ftWideString]) then Result := SelectedField.Size; end;

在那里,您有多种方法可以达到我想要的行为.

>对要限制的字段使用TField EditMask属性.这将由Grid.GetEditMask调用返回.无需从TDBGrid继承并覆盖任何内容.可以在逐场的基础上控制行为.
>创建自己的TDBGrid后代,覆盖GetEditLimit
根据SelectedField为inplace编辑器返回MaxLength

方法1的代码可能如下所示:

如何设置Delphi中TDBGrid的inplace编辑器限制最大文本长度?

// Opening of dataset ... DataSet.FieldByName('FloatField').EditMask := '00.00';

这将掩盖在小数分隔符之前和之后需要两位数.有关面具的更多信息,请参见TEditMask

方法2:

uses Data.DB, Vcl.DBGrids; type TMyDBGrid = class(TDBGrid) protected function GetEditLimit: Integer; override; end; implementation { TMyDBGrid } function TMyDBGrid.GetEditLimit: Integer; begin Result := inherited GetEditLimit; if (Result = 0) and Assigned(SelectedField) and (SelectedField.DataType = ftFloat) then Result := 5; // Whatever you decide end;

就像kobik建议的那样,你可以将这个类用作插入类.为此,添加TDBGrid = class(TMyDBGrid);在您要使用该网格的单元中.如果您在要使用它的同一单元中声明TMyDBGrid,请使类型引用清除TMyDBGrid = class(Vcl.DBGrids.TDBGrid).

标签:inplace

本文共计405个文字,预计阅读时间需要2分钟。

如何设置Delphi中TDBGrid的inplace编辑器限制最大文本长度?

在TDBGrid中限制inplace编辑器的最大文本长度,可以通过设置相应属性来实现。以下是一个简化的示例:

pascalprocedure TInplaceEdit.UpdateContents;begin Text :=''; EditMask :=Grid.G'';end;

如何在TDBGrid中限制inplace编辑器的最大文本长度? (德尔福柏林)

数据类型是Float.

TDBGrid中的inplace编辑器将通过调用更新其内容

procedure TInplaceEdit.UpdateContents; begin Text := ''; EditMask := Grid.GetEditMask(Grid.Col, Grid.Row); Text := Grid.GetEditText(Grid.Col, Grid.Row); MaxLength := Grid.GetEditLimit; end;

GetEditMask的实现方式如下:

function TCustomDBGrid.GetEditMask(ACol, ARow: Longint): string; begin Result := ''; if FDatalink.Active then with Columns[RawToDataColumn(ACol)] do if Assigned(Field) then Result := Field.EditMask; end;

和GetEditLimit像这样:

function TCustomDBGrid.GetEditLimit: Integer; begin Result := 0; if Assigned(SelectedField) and (SelectedField.DataType in [ftString, ftWideString]) then Result := SelectedField.Size; end;

在那里,您有多种方法可以达到我想要的行为.

>对要限制的字段使用TField EditMask属性.这将由Grid.GetEditMask调用返回.无需从TDBGrid继承并覆盖任何内容.可以在逐场的基础上控制行为.
>创建自己的TDBGrid后代,覆盖GetEditLimit
根据SelectedField为inplace编辑器返回MaxLength

方法1的代码可能如下所示:

如何设置Delphi中TDBGrid的inplace编辑器限制最大文本长度?

// Opening of dataset ... DataSet.FieldByName('FloatField').EditMask := '00.00';

这将掩盖在小数分隔符之前和之后需要两位数.有关面具的更多信息,请参见TEditMask

方法2:

uses Data.DB, Vcl.DBGrids; type TMyDBGrid = class(TDBGrid) protected function GetEditLimit: Integer; override; end; implementation { TMyDBGrid } function TMyDBGrid.GetEditLimit: Integer; begin Result := inherited GetEditLimit; if (Result = 0) and Assigned(SelectedField) and (SelectedField.DataType = ftFloat) then Result := 5; // Whatever you decide end;

就像kobik建议的那样,你可以将这个类用作插入类.为此,添加TDBGrid = class(TMyDBGrid);在您要使用该网格的单元中.如果您在要使用它的同一单元中声明TMyDBGrid,请使类型引用清除TMyDBGrid = class(Vcl.DBGrids.TDBGrid).

标签:inplace