delphi - Delphi,TEdit 文本作为动作触发器
问题描述
我正在使用 aTEdit
来允许用户输入一个数字,例如 10。
我将 转换TEdit.Text
为整数并调用计算过程。
在此计算过程中,内置检查以确保不处理低于 10 的数字。
目前我使用该OnChange
事件。假设用户想要将'10' 更改为例如'50'。但是,一旦删除了“10”或键入了“5”(后面是 0),我就会触发最小数字为 10 的警告。即程序不会等到我完全输入5 和 0。
我试过OnEnter
, OnClick
, OnExit
,但我似乎没有克服这个问题。唯一的解决方案是添加一个单独的按钮,该按钮将使用新数字触发计算。它有效,但我可以不用按钮吗?
解决方案
使用计时器进行延迟检查,例如:
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 毫秒应该没问题。
正如大卫在对问题的评论中所建议的那样:不要显示错误对话框,而是使用干扰较小的东西,例如在编辑附近的标签中显示错误消息或更改背景颜色。还有:不要阻止焦点从那个控件上移开,不要播放声音,这也很烦人。
对于我们的内部软件,如果出现错误,我们将控件的背景设置为黄色,并在状态栏中显示第一个此类错误的错误消息,并作为控件提示。如果你这样做,你可能甚至不需要延迟。
推荐阅读
- clickhouse - Clickhouse中具有唯一和非唯一数据的频率直方图
- c++ - 将 for 循环与向量一起使用时是否存在错误?
- python - 如何在多个断言语句之间清除捕获的标准输出/标准错误
- reactjs - 如何检索表单中提交的错误值?
- python-3.x - 我的 for 循环给了我超过 1 个值
- php - Apache 不会记录所有 php 错误
- karma-jasmine - 如何在业力测试运行器中修复“TypeError:this.form.get 不是函数”
- linux - Buildroot 不生成压缩内核映像
- javascript - 如何在另一个文件夹中设置 .next-folder?
- python - 遍历数据框中的行并根据其他列更改列的值