我有StringGrid,并希望只有1
或0
的单元格。我尝试使用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之外的所有数字?
答案 0 :(得分:3)
出于您的意图,您需要继承TStringGrid
类,并在此类子类中分配给inplace编辑器,例如这个插入类中显示的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;
答案 1 :(得分:2)
您误解了OnGetEditMask
事件。 Value
不是您可以更改的新字符串,而是您应该为控件提供掩码的位置。但遗憾的是,edit masks不允许您请求的功能。