是否可以在TDateEdit Firemonkey控件上指定最小日期?

use*_*638 4 delphi firemonkey delphi-xe7

例如

MyDateEdit.MinDate := DateOf(Now);
Run Code Online (Sandbox Code Playgroud)

我正在使用Delphi XE7 Update 1,帮助文件似乎没有提到任何属性或方法来执行此操作

Dal*_*e M 5

没有我知道的属性,但您可以使用MyDateEdit控件的OnChange事件强制执行此操作.

procedure TForm1.MyDateEditChange(Sender: TObject);
begin
  with Sender as TDateEdit do
  begin
    if Date < Now then
      Date := Now;
    end;
  end;
Run Code Online (Sandbox Code Playgroud)

根据以下@SilverWarior的评论澄清:这将不允许您的最低日期之前的任何日期随时存在于您的控制中.如果您希望用户通过键盘输入输入日期(并且在输入期间日期可能低于最小值),则最好使用OnExit事件而不是OnChange事件.

  • 我没有试过这个,但我相信你的代码可能会有潜在危险.为什么?我假设如果您决定通过键盘输入日期,则在输入到组件中的每个字符后都会触发OnChange事件.对?如果是这样,则意味着在下一个场景中,您的代码实际上会阻止用户输入正确的有效日期.我们假设今天的日期是25.03.2015,您想输入有效的24.04.2015日期.但为了做到这一点,你将首先在白天开始输入.... (3认同)
  • ...所以屁股儿子,因为你按2键,当天部分将设置为2,日期将被识别为02.03.2015,这将被视为无效,并在今天的日期迅速更改.这种变化可能发生得如此之快,以至于对于用户而言,控制似乎甚至不接受任何键盘输入.所以也许最好使用OnExit事件来验证TDateEdit控件焦点丢失时的日期.也许您甚至想要使用KeyPress事件来检测按下Enter键以验证日期而不离开控件. (2认同)