0

我设置了这个TEditMask

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

我有一个TDBEdit与该字段相关的内容。

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

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

4

2 回答 2

3

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

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

您不必知道编辑掩码或特定的语言环境信息。

于 2016-09-11T23:55:37.330 回答
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;
于 2014-11-03T20:02:52.943 回答