当字段有EditMask时如何允许空的TDBEdit?

时间:2014-11-03 19:46:09

标签: delphi clear delphi-xe3 input-mask

我已设置此TEditMask

DateTimeField.EditMask := '!99/99/9999;1; ';

我有TDBEdit链接到此字段。

掩码适用于有效日期,但当用户尝试清除输入值(使用DEL键)时,在离开掩码时会导致EConvertError

如何更改此行为以清除字段值?

2 个答案:

答案 0 :(得分:2)

我找到了使用该字段的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;

答案 1 :(得分:2)

您可以在基础数据字段的OnSetText事件处理程序中针对空掩码测试编辑文本,并仅在没有匹配时设置字段值。

procedure TForm1.DataTimeFieldSetText(Sender: TField; const Text: string);
begin
  if not (maskutils.FormatMaskText(Sender.EditMask, '') = Text) then
    Sender.AsString := Text;
end;

您不必知道编辑掩码或特定区域设置信息。