[FMX] Android 下如何让编辑框中只输入数字

XE 7 中 Android 下,字符不会触发 OnKeyDown 事件,所以你无法再在编辑框中过滤一些特殊字符,禁止用户输入。虽然 XE7 的TEdit 提供了一个 FilterChar ,但遗憾的是它依然不好。通过分析,其提供了一个 OnValidating 方法在用户输入一个字符时,触发来让您验证输入的有效性。但不幸的是,你在 OnValidating 中修改 Text 的值不会影响显示的效果,个人认为这是一个Bug,问题发生在 FMX.Edit.Style.pas 中:

但修改源码我并不觉得是一个好办法,暂时,我们可以通过异步触发一个事件来修改编辑框的内容:

上面的代码让其只能输入数字,对于非数字的键值将被直接过滤掉。注意,我用到了 QWorker.Post 方法和 QString.StrDupX 函数,您可以替换它们为自己类似的方法,如:在FMX中实现PostMessage的方法

QString 中提供了一个 FilterCharW 函数和 FilterNoNumberW 函数来提供一些辅助的过滤功能,上面的代码如果用 FilterNoNumberW 可以直接简化为:

 

分享到:

0 条评论

沙发空缺中,还不快抢~