User interface 如何在4d数据库的列表框列中设置24小时时间格式的条目过滤器
我有一个有两列的列表框(比如“from time”和“to time”)。我只想按24小时格式过滤用户输入,即除单元格中的24小时格式(即00:00至24:00)外,不允许按任何其他键。我试过这样做:&“0-2”和“0-3”和“0-5”和“0-9”效果很好,但它不允许在单元格值中放入19:22或13:59之后的值,因为我没有传递24小时时间格式的其他可选值。在正则表达式中,实现这个('/^([01][0-9]| 2[0-3]):([0-5][0-9])$/')有点容易,但不确定如何在4d数据库列表框单元格字段中实现User interface 如何在4d数据库的列表框列中设置24小时时间格式的条目过滤器,user-interface,4d-database,User Interface,4d Database,我有一个有两列的列表框(比如“from time”和“to time”)。我只想按24小时格式过滤用户输入,即除单元格中的24小时格式(即00:00至24:00)外,不允许按任何其他键。我试过这样做:&“0-2”和“0-3”和“0-5”和“0-9”效果很好,但它不允许在单元格值中放入19:22或13:59之后的值,因为我没有传递24小时时间格式的其他可选值。在正则表达式中,实现这个('/^([01][0-9]| 2[0-3]):([0-5][0-9])$/')有点容易,但不确定如何在4d数据库列
任何帮助都将不胜感激。谢谢。如果您需要对输入值进行精细控制,我建议您将列表框列设置为文本,并自行管理显示和UI
时间字符串
方法将为您转换时间值:
$timeStr:=时间字符串(当前时间)/$timeStr=“07:23:45”
输入过滤器不是正则表达式,不会提供所需的精细控制。它们可以让你过滤不需要的字符(例如,除了数字以外的任何字符)。对列上的条目过滤器尝试此操作
!0和9:
结果将是输入的数字的文本字符串。编写一个方法来获取输入字符串,解析元素,验证它们,更新数据源,然后返回一个格式正确的字符串以供显示。我将使用On data change
表单事件作为运行该方法的触发器
$h:=Num(Substring($inputStr;1;2))
$m:=Num(Substring($inputStr;3;2))
$s:=Num(Substring($inputStr;5;2))
最新版本的4D将时间值管理为午夜后的秒数,这就是为什么有时您可能会得到一个长时间值而不是“时间”值。根据您使用的版本和列表框的类型(集合、实体选择、数组等),您甚至可能没有列表框列的“时间”类型选项,这可能会造成混淆。考虑到所有这些,将值字符串化并处理它就更容易了
例如,如果用户输入“33:45:00”,您想做什么?如果您想在一开始就拒绝“33”,您可以在键入每个字符时对其求值。击键后打开表单事件允许您在字段中每次更改后运行评估方法,获取编辑文本命令允许您查看用户输入的内容
要将字符串(或longint)转换为时间值,请使用time
方法:
$timeVar:=时间($timeStr)
4D是一种类型化语言,从一开始就有时间类型。但是,随着ORDA的添加,一些UI对象不再支持时间类型(例如,集合和实体选择列表框),而是使用longint类型。如果您正在使用现有的应用程序或旧代码,但试图使用更新的工具,则可能会产生混淆。一定要仔细看看
及
您可能不需要如此参与输入。这取决于用户界面和数据的性质。时间和日期在几乎每个平台上都很棘手。你好,Kirk,谢谢你的建议,我已经完全按照你在第一个建议中提到的做了,即将输入值作为字符串,然后解析为时间值,然后根据有效的时间值进行验证,然后在这里提出问题。我正在寻找在UI中的用户输入级别过滤时间值的方法。但现在看来,在4D中实现它是不可能的,就像我们可以使用正则表达式在JSHTML输入中实现一样。实际上,我希望在用户界面中,用户输入值最多只能达到HH:MM
,因此使用!0和9###:##
作为条目过滤器,并在数据更改时在中验证。谢谢