这个问题说明了一切。我想知道手动调用accepttext()
或pfc_accepttext
以强制powerbuilder接受数据窗口字段中的值是否是个好主意。
这个问题背后的原因是我在弹出窗口中有一个包含一些字段的数据窗口。当用户在该字段中输入值并按下OK
按钮时,将保存数据窗口并关闭弹出窗口。单击确定按钮时,最后一个字段未正确接受输入值。这就是我考虑手动触发accepttext()
或pfc_accepttext
事件的原因。
任何帮助将不胜感激!!!
感谢。
答案 0 :(得分:4)
是的,确保在尝试保存任何数据窗口之前触发dw.accepttext()
是一个非常好的主意。否则,就像你指出的那样,它可能无法保存用户输入的所有信息,除非它们标出每个字段;不应该指望哪些最终用户。
对于更复杂的窗口/对象,您可以为此创建一个简单的函数,例如wf_accepttext()
,其中包含需要更新的每个数据窗口的所有dw.accepttext()
调用。然后,您可以在尝试更新数据窗口之前调用该函数。
(编辑)其他想法:
特里上面的评论让我想起了我在最初的答案中忽略的事情。如果字段的验证失败,accepttext()
将返回-1
。
因此,如果您创建自定义函数来处理所有accepttext()
调用,请确保编写它以处理此返回代码。像这样的东西就足够了:
/* wf_accepttext() */
if dw_foo.accepttext() = -1 then return false
if dw_bar.accepttext() = -1 then return false
// etc..
return true
这样,在保存功能的顶部,我们称之为wf_save()
,你可以这样做:
/* wf_save() */
if not wf_accepttext() then return false
/* any other save validation and the dw.update() goes below here */
如果某些内容无法验证,wf_save()
将会保释,而您的itemchanged
事件应该有代码来处理其他内容。
答案 1 :(得分:2)
因此,在没有看到您的代码的情况下,并不完全清楚为什么pfc_AcceptText没有被触发。但是,我可以说的是pfc_AcceptText是由PowerBuilder Foundation Class(PFC)的逻辑工作单元服务定义的事件。虽然在my article中可以找到超过您通常想要或需要了解PFC的LUW服务的内容,但您已经意识到我忘记了记录此服务的预期入口点。意图(你应该能够在(pfcmain.pbl)pfc_w_master [closequery]中看到)是你激活窗口的pfc_Save事件,它会以适当的顺序触发所有LUW事件(例如pfc_Validation,pfc_PreUpdate)。
祝你好运,特里。