首页 > 解决方案 > Delphi,TEdit 文本作为动作触发器

问题描述

我正在使用 aTEdit来允许用户输入一个数字,例如 10。

我将 转换TEdit.Text为整数并调用计算过程。

在此计算过程中,内置检查以确保不处理低于 10 的数字。

目前我使用该OnChange事件。假设用户想要将'10' 更改为例如'50'。但是,一旦删除了“10”或键入了“5”(后面是 0),我就会触发最小数字为 10 的警告。即程序不会等到我完全输入5 和 0。

我试过OnEnter, OnClick, OnExit,但我似乎没有克服这个问题。唯一的解决方案是添加一个单独的按钮,该按钮将使用新数字触发计算。它有效,但我可以不用按钮吗?

标签: delphidelphi-10.1-berlin

解决方案


使用计时器进行延迟检查,例如:

procedure TForm1.Edit1Change(Sender: TObject);
begin
  // reset the timer
  Timer1.Enabled := false;
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  // do your check here
end;

对于大多数用户来说,将计时器设置为 500 毫秒应该没问题。

正如大卫在对问题的评论中所建议的那样:不要显示错误对话框,而是使用干扰较小的东西,例如在编辑附近的标签中显示错误消息或更改背景颜色。还有:不要阻止焦点从那个控件上移开,不要播放声音,这也很烦人。

对于我们的内部软件,如果出现错误,我们将控件的背景设置为黄色,并在状态栏中显示第一个此类错误的错误消息,并作为控件提示。如果你这样做,你可能甚至不需要延迟。


推荐阅读