我设置了这个TEditMask
:
DateTimeField.EditMask := '!99/99/9999;1; ';
我有一个TDBEdit
与该字段相关的内容。
掩码适用于有效日期,但是当用户尝试清除输入值(使用DEL
键)时,会导致EConvertError
在离开掩码时导致。
如何更改此行为以清除字段值?
我设置了这个TEditMask
:
DateTimeField.EditMask := '!99/99/9999;1; ';
我有一个TDBEdit
与该字段相关的内容。
掩码适用于有效日期,但是当用户尝试清除输入值(使用DEL
键)时,会导致EConvertError
在离开掩码时导致。
如何更改此行为以清除字段值?
您可以在底层数据字段的事件处理程序中针对空掩码测试编辑文本OnSetText
,并仅在不匹配时设置字段值。
procedure TForm1.DataTimeFieldSetText(Sender: TField; const Text: string);
begin
if not (maskutils.FormatMaskText(Sender.EditMask, '') = Text) then
Sender.AsString := Text;
end;
您不必知道编辑掩码或特定的语言环境信息。
我找到了使用OnSetText
该字段事件的解决方案:
procedure TForm1.DateTimeFieldSetText(Field: TField; const Text: string);
begin
// This only works for locales where the date separator is '.'
if Text = ' . . ' then
Field.AsString := ''
else
Field.AsString := Text
end;