Delphi 当字段具有EditMask时,如何允许空TDBEdit?

Delphi 当字段具有EditMask时,如何允许空TDBEdit?,delphi,delphi-xe3,input-mask,Delphi,Delphi Xe3,Input Mask,我已设置此TEditMask: DateTimeField.EditMask := '!99/99/9999;1; '; 我有一个链接到此字段的TDBEdit 掩码适用于有效日期,但当用户尝试清除输入值(使用DEL键)时,离开掩码时将导致EConvertError 如何更改此行为以清除字段值?我使用字段的OnSetText事件找到了一个解决方案: procedure TForm1.DateTimeFieldSetText(Field: TField; const Text: string);

我已设置此
TEditMask

DateTimeField.EditMask := '!99/99/9999;1; ';
我有一个链接到此字段的
TDBEdit

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


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

我使用字段的
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;

我使用字段的
onsetext
事件找到了一个解决方案:

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;

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

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

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

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

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

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

请清除基础字段<代码>日期时间字段。清除
。我通常提供一个按钮来清除这些字段(例如
tbuttonedit
中的一个,或者我们在内部编写的一个用于DB感知的按钮,但是正常的TButton或TSpeedButton也可以)。这是一个很好的解决方法。请清除底层字段<代码>日期时间字段。清除
。我通常会提供一个按钮来清除这些字段(比如
tbuttonedit
中的一个,或者我们在内部编写的一个用于DB感知的按钮,但是正常的TButton或TSpeedButton也可以),这是一个很好的解决方法。