我有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以外的所有数字?

最佳答案

为了您的意图,您需要对TStringGrid类进行子类化,并在此类子类中将其分配给就地编辑器的例如OnKeyPress事件,如以下中介程序类中所示:

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;

关于delphi - Delphi二进制数字掩码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15645792/

10-09 04:01