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