我使用jquery slim
来允许用户输入数字,例如10。
我将TEdit
转换为整数,并调用计算过程。
在此计算程序中,内置了一项检查,以确保不会处理10以下的数字。
目前我使用TEdit.Text
事件。假设用户想要将'10'改变为例如'50'。但是一旦删除'10'或输入'5'(后跟0),我就会触发警告,即最小数字为10。程序不会等到我完全键入5和0。
我尝试了OnChange
,OnEnter
,OnClick
,但我似乎没有克服这个问题。唯一的解决方案是添加一个单独的按钮,该按钮将使用新数字触发计算。它有效,但我可以不使用按钮吗?
答案 0 :(得分:3)
使用计时器进行延迟检查,例如:
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毫秒应该没问题。
正如大卫在评论中建议的那样:不显示错误对话框,使用更少侵入性的内容,例如:编辑附近标签中的错误消息或更改背景颜色。而且:不阻止焦点从该控件移开并且不播放声音,这也非常烦人。
对于我们的内部软件,如果出现错误,我们将控件的背景设置为黄色,并在状态栏中显示第一个此类错误的错误消息,并作为控件的提示。如果你这样做,你甚至可能不需要延迟。
答案 1 :(得分:0)
谢谢你的帮助。我尝试了计时器选项,但无法让它工作。我现在有了这个代码,它可以工作(几乎 - 见下文),但要求用户总是输入CR:
/usr/include/c++/7/stdlib.h
我在这里只使用ShowMessage()来查看示例代码是否有效。正如你们所建议的那样,在真正的程序中,我把它留了下来。 我还包括'错误输入黄色'(感谢大卫)。唯一的问题是如果用户运行这个,我会从我的电脑发出一声哔哔声。我看不出出了什么问题。但是什么导致了哔哔声?