将记录保存到数据库后,我希望任何字段更改颜色以指示用户在该字段中键入时进行了未提交的更改。
最好只在 closeField 上设置前景色,还是最好跟踪每个按键,并将其与包含先前字段内容的变量进行比较?
您是否在询问如何在完成加载字段数据的过程并输入新的未保存数据后检测文本更改?您提到了新的未提交更改,我不确定您的想法。这意味着使用 closeField 处理程序不会指示“如果他们在该字段中键入未提交的更改”
但是,如果是这样,我会在写入数据库时设置字段的自定义属性,并在字段脚本中放置一个简单的处理程序
on textChanged
if me <> the lastText of me then set the foreColor of me to "blue"
end textChanged
该属性名为“the lastText”,由保存到数据库的任何处理程序设置。
set the lastText of field "yourField" to field "yourField"
如果在该字段中编辑了任何内容,颜色将变为蓝色。当然,保存处理程序也应该将颜色设置回黑色。
在 glx2 中,我们实际上做了一些矫枉过正的工作——保存时保存字段的 md5digest,然后根据保存的值检查字段的 md5digest 以查看是否需要保存。显然,您不想在每次按键时都进行计算,无论它有多快。在 closeField 上执行此操作是处理它的好方法,尽管我似乎记得过去有一个问题,如果您单击 OSX 上的另一个应用程序,closeField 不会被触发。
这是一个卡片级脚本,用于处理表单上的所有字段。将数据加载到卡片时,将每个字段的 uOriginalText 自定义属性设置为与加载到字段中的文本相同的值。
on closeField
# the target control for this message
put the target into tTarget
# detect case changes like 'mr jobs' to 'Mr Jobs'
set the caseSensitive to true
# compare with the original text, set when the form was loaded
if the text of tTarget <> the uOriginalText of tTarget then
# indicate the change - I've used backColor in case the field is now empty
set the backColor of tTarget to "red"
else
# clear warning background color
set the backColor of tTarget to empty
end if
end closeField