2010-10-27 85 views
1

这是一个好主意这个问题说明了一切。我想知道是否需要手动调用accepttext()pfc_accepttext来强制powerbuilder接受数据窗口字段中的值。Powerbuilder:调用accepttext方法

这个问题背后的原因是我有一个弹出式窗口中的数据窗口,其中包含一些字段。当用户在该字段中输入数值并按下按钮时,数据窗口将被保存并且弹出窗口关闭。点击确定按钮后,最后一个字段不能正确接受输入值。这就是为什么我在考虑手动解雇accepttext()pfc_accepttext事件。

任何帮助将不胜感激!

谢谢。

+0

你能澄清为什么“最后一个字段没有正确接受输入值”,为什么你认为这是一件坏事?如果它没有通过一定程度的验证,那么它会失败,然后才会失败。 – Terry 2010-10-28 02:57:52

+0

@Terry:因为在最后一个字段中输入了一些值之后,我点击了OK按钮,因此accepttext没有被触发。 – 2010-10-28 06:16:16

回答

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事件应该有代码来处理其余的问题。

2

因此,如果没有看到您的代码,它不完全清楚为什么pfc_AcceptText不会触发。但是,我可以说的是,pfc_AcceptText是由PowerBuilder Foundation Class(PFC)逻辑工作单元服务定义的事件。虽然比您想要或需要了解的PFC的LUW服务更多,但可以在my article中找到,但您已经意识到我忘记记录此服务的预期入口点。意图(你应该能够看到(pfcmain.pbl)pfc_w_master [closequery])是你触发窗口的pfc_Save事件,它将以适当的顺序触发所有的LUW事件(例如pfc_Validation,pfc_PreUpdate)。

祝你好运,

特里。

+0

我相信Night Shade指的是当您在键入内容后将光标留在字段中,然后立即单击试图更新该数据窗口的按钮。至少在Powerbuilder的旧版本(在我的例子中是11.5)中,除非你真的退出所述字段,''''''''''''''dw.update()''''accepttext'事件不会被及时触发。 – 2010-10-29 00:05:59

+1

PFC的LUW服务将在Update()之前显式触发AcceptText(),并且调用正确;这是使用服务而不是自己编码的另一个好处。混合隐喻,使用更新服务,同时编写自己的保存例程的一半,会产生很多风险。 – Terry 2010-10-29 05:18:32