我有一个简单的问题
我在 Delphi 10.4中有一个TStringGrid
,在那里有一个TDatePicker
,我想用它在FixedCol
中选择一个日期。当我单击标题单元格时,TDatePicker
打开并显示今天的日期。我已经在TForm.OnCreate
事件中为TDatePicker
预先选择了今天的日期。此外,我有一个TDatePicker
的OnCloseUp
事件,它将所选日期写入单元格。
然而,当我用勾号确认和用X取消时,它都会这样做。
如何查询用户是否已单击“取消”,以便我不输入值?
我的代码或多或少是这样的:
procedure TForm1.DatePicker1CloseUp(Sender: TObject);
begin
//if DatePicker.Cancel ?? then
// exit;
StringGrid1.Cells[col, row] := FormatDateTime(dateformat, DatePicker1.Date);
end;
我只发现,如果我选择一个日期,然后单击确定,我会得到选择的日期。选择另一个日期,然后单击取消返回预定义的日期。
2条答案
按热度按时间mo49yndu1#
在内部,控件(
TDatePicker
)使用Date
属性存储值。在更改组件上的值之前,可以加载并存储此值。最后,可以查看Date
属性相对于初始值是否有更改。如果没有变化,可能是由于:
在这两种情况下,都不需要更新
TStringGrid
。测试如下内容:
tgabmvqs2#
经过尝试,我发现了一个解决方案,至少为鼠标输入:
我取了相对于TDatePicker的Cursor位置。如果X坐标在右半边,按下取消按钮,我可以退出函数,而不将日期写入StringGrid。