【发布时间】:2013-11-08 12:45:41
【问题描述】:
我有7个用户可以输入数字的编辑,数字必须在1100到1500之间。开始时,第一个编辑是焦点,用户输入他的数字,然后他推动标签聚焦到下次编辑...
我的程序必须验证用户输入的数字,如果它不满足条件(1100
我在 Edit1Change 上尝试过这段代码,但它不起作用
If (1500 < (strtofloat(edit1.text)) or (strtofloat(edit1.text) <1100) then
begin
Showmessage ('my message');
edit1.setfocus
end;
更新
对不起各位,我对问题的描述不是很清楚,而且我的英语也不是很好。
比较或检查条件我没有问题,我的问题是当我按TAB选择下一个编辑时,即使条件不满足,我的消息也会出现,Edit1.Text被重置为0 并且光标移动到下一个编辑控件。我想要的是当用户按下 Tab 并且输入的数字不满足条件时,出现消息,Edit1.Text 取 0 并且光标停留在 Edit1 上。
我尝试在Edit1.OnExit 中放置对条件的检查和将焦点放在同一编辑的指令,但它不会正常工作,总是当用户在输入不满足的数字后按 Tab 时条件,消息出现,第一个 Edit 取 0,光标移到下一个 Edit。
【问题讨论】:
-
1) “不起作用”是什么意思? 2)您可以使用任何现成的组件来输入已经检查最小值和最大值的数字 3)您可以使用任何现成的库来验证输入并标记错误的条目
-
不能再同意了。有TSpinEdits之类的,为什么还要依赖TEdits?此外,
OnChange事件也不适合这样做,因为当用户通过鼠标单击或 Tab 离开编辑组件时它不会触发。 -
@GünthertheBeautiful 单独使用 OnExit 也存在问题:当通过 ENTER 或 ESC 键关闭对话框时它不起作用 - 当焦点实际上没有进一步传递而只是关闭了表单时。或者当 TPageControl 选项卡被切换或通过单击 TSpeedButton 或 TMenuItem 关闭对话框时 - 事件无法重新设置焦点,因为 TEdit.Parent 已经不可见。所以应该更好地依赖一些表单范围的验证框架
-
@user29 :我的答案如何捕捉
tab按下的键。 Event for tab -
谢谢,选项卡事件的链接对我帮助很大,解决方案是将检查条件和指令(edit1.setfocus)放在下一次编辑的键上; )
标签: delphi delphi-xe2 setfocus