2

我有 StringGrid 并且只想在其中包含单元格10. 我尝试使用 StringGridGetEditMask

procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol,
  ARow: Integer; var Value: String);
begin
  Value := '0';
  if not (strToInt(Value) in [0,1]) then value := #0;
end;

但是我可以输入从 0 到 9 的所有数字。如何过滤除 0 和 1 之外的所有数字?

4

2 回答 2

3

为了您的意图,您将需要对该类进行子TStringGrid类化,并在此类子类中分配给就地编辑器的 egOnKeyPress事件,如此插入器类中所示:

type
  TStringGrid = class(Grids.TStringGrid)
  private
    procedure InplaceEditKeyPress(Sender: TObject; var Key: Char);
  protected
    function CreateEditor: TInplaceEdit; override;
  end;

implementation

{ TStringGrid }

function TStringGrid.CreateEditor: TInplaceEdit;
begin
  Result := inherited CreateEditor;
  TMaskEdit(Result).OnKeyPress := InplaceEditKeyPress;
end;

procedure TStringGrid.InplaceEditKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [#8, '0', '1']) then
    Key := #0;
end;
于 2013-03-26T19:48:36.610 回答
2

你误解了这个OnGetEditMask事件。Value不是允许您更改的新字符串,而是您应该给控件一个mask的地方。然而,不幸的是,编辑掩码不允许您请求的功能。

于 2013-03-26T19:34:44.740 回答