如何从 Powerbuilder 9.0 中的弹出窗口返回值或结构?CloseWithReturn 仅对响应窗口有效,因此不可用。当我为 Message.PowerObjectParm 设置一个值时,弹出窗口关闭时该值变为空。我需要使用弹出窗口,以便用户可以单击返回调用者窗口并滚动浏览行。
程序流程: 1) 窗口 A OpenWithParm 2) 窗口 B 现在打开 3) 用户与两个窗口交互 3) 用户关闭窗口 B 4) 窗口 B 需要将结构传递回窗口 A
如何从 Powerbuilder 9.0 中的弹出窗口返回值或结构?CloseWithReturn 仅对响应窗口有效,因此不可用。当我为 Message.PowerObjectParm 设置一个值时,弹出窗口关闭时该值变为空。我需要使用弹出窗口,以便用户可以单击返回调用者窗口并滚动浏览行。
程序流程: 1) 窗口 A OpenWithParm 2) 窗口 B 现在打开 3) 用户与两个窗口交互 3) 用户关闭窗口 B 4) 窗口 B 需要将结构传递回窗口 A
您可以通过在打开弹出窗口时传入对父窗口的引用并将引用存储在实例变量中来绕过父限制的“一个实例”。这也可以确保您使用正确版本的 w_my_parent_window_name。
您将无法按照您的想法完成此操作。由于您从父级打开的窗口不是响应窗口,因此两者没有明确链接在一起。
但是您可以通过在父窗口中拥有一个属于您的自定义结构类型的公共实例变量来完成此操作。然后在关闭子窗口之前,通过以下方式在父窗口中显式设置变量:
w_my_parent_window_name.istr_my_structure = lstr_my_structure
仅当仅实例化一个 w_my_parent_window_name 实例时才应执行此操作。
如果您使用的是 PFC,如果我没记错的话,您也可以使用一项服务。
Message.PowerObjectParm 可用于传递对象。弹出窗口关闭时它变为 NULL 的原因是结构是自动实例化和自动销毁的。它们仅在声明的范围内有效。例如,如果它在函数中声明,它将在函数完成时被销毁;如果它是弹窗的实例变量,它会在弹窗关闭时与弹窗一起被销毁。
在关闭弹出窗口之前,您可以将结构复制回父窗口上相同类型的变量中,如 Dougman 建议的那样,或者您可以使用对象而不是结构。例如,只需创建自定义对象并在其中声明公共实例变量,就像结构变量一样。
您当然需要显式地创建和销毁对象。由弹出窗口创建的对象将保持实例化,直到显式销毁,即使在弹出窗口本身被销毁之后也是如此。
总是有多种方法可以解决问题。我会提出另一个,即使这个问题很老......
当您关闭弹出窗口时,您可以在父窗口上触发自定义事件。好吧,从技术上讲,您可以触发父窗口上的任何事件,但我建议专门为此创建一个自定义事件,以便您可以将结构作为参数传递给该事件。
使用局部结构变量返回选定的值,只需在父窗口中使用 Message.PowerObjectParm 并验证结构变量的存在,如果关闭响应窗口而不进行任何选择。