我有一个包含两个TAdvDateTimePicker组件的表单,以及很少的其他编辑(在delphi XE7中)。这两个datetime字段都是可选的,因此如果用户不想填充它们,那么在数据库中都将为null。
问题是,与旧的TDateEdit不同,TAdvDateTimePicker即使默认也不接受空值。我知道,像" null datetime"不存在,但我需要知道,如果用户确实或不想填写这些日期。因此,将今天的日期保留为默认日期,并使用onChange,onEnter或任何操作来检查是否已设置值,不是解决方案 - 他可能想要使用今天的日期,所以他离开了就是这样。
当然有可能将默认值设置为,让我们说1.1.1900(一个明显的废话),然后检查它是否已经改变,但这是我想做的最后一件事。还有更好的方法吗?
由于
答案 0 :(得分:2)
感谢Sertac Akyuz,这是最简单的解决方案:
onActivate表单,将.Format属性设置为空格(''):
procedure TfrmDeliveriesEdit.FormActivate(Sender: TObject);
begin
DateTimePicker1.Format:= ' ';
end;
然后,在选择器的输入中,将格式设置为空字符串('')以恢复,如果用户想要填充实际值
procedure TfrmDeliveriesEdit.DateTimePicker1Enter(Sender: TObject);
begin
DateTimePicker1.Format:= '';
end;
编辑: 返回" null"值,在onKeyDown事件中检查删除键,如下所示:
procedure TfrmDeliveriesEdit.dpTaxDateKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_DELETE then dpTaxDate.Format:= ' ';
end;