从常规函数访问Powerbuilder窗口实例变量

时间:2016-12-14 10:28:37

标签: powerbuilder

  

块引用

我有多个窗口都需要相同的代码,w_emp1,w_emp2,w_emp3 ....因此,将这个公共代码放入函数wf_access_test中似乎是谨慎的。

这些窗口中的每一个都有自己的一组实例变量。比如说is_text_name,is_text_town,is_text_zip_code ......等等。

wf_access_test()的代码如下。请注意,特定窗口(w_emp1)已经过硬编码。这允许我更新该特定的Windows实例变量。

我需要的是一个解决调用窗口名称实例变量的方法,但是替换硬编码的w_emp1限定符

w_emp1.is_text_name = ‘Text Updated’     //Updating this windows instance variable - This works!

我尝试使用窗口名称调用函数作为传递给函数的值,参数type = window。

即。 wf_access_test(w_emp_1)

不幸的是,当我尝试用硬编码的w_emp1替换传递的值时,它表示 - 不兼容的属性类型?

那里有哪些专家可以提供帮助?非常感谢您的期待。

2 个答案:

答案 0 :(得分:1)

  1. 创建第一个窗口w_emp
  2. 定义各种窗口w_empxx之间的所有共同点(特别是您需要的实例变量)。
  3. 特别是,定义函数wf_access_test
  4. 创建继承自w_empxx
  5. 的所有其他窗口w_emp
  6. 专注于您的新窗口
  7. 完成!

    这样,每次调用wf_access_test时,Powerbuilder都会从祖先处获取它,并使用来自您进行调用的特定窗口中的实例变量。当然,这可能需要一些(或许多)工作,但从长远来看,它会更好。 其他好处:如果您需要更改特定窗口的wf_access行为,您可以在后代级别重新定义它。

答案 1 :(得分:0)

我首先将公共变量放入结构中,以便在一个地方更容易维护。

然后,您可以在窗口上添加一个函数,该函数支持具有该结构类型的参数以更新该窗口内的值,或者只是将结构保存到您的实例并直接使用它。

要调用参数,您应该能够使用任何常用的祖先来保存您用于保存对实例的引用的窗口;但是,当您调用该函数时,您将需要使用动态调用,因为基类将不具有该方法。例如,如果您将w_master作为共同祖先并使用参数类型w_master(名称为aw_ref)设置函数,则可以使用调用aw_ref.DYNAMIC setData(astr_data)来调用子类中的函数setData。

如果您检查有关动态调用的PowerBuilder帮助,它将为您提供有关使用动态调用时的注意事项的信息。

显然,首选的方法是让你自己的继承对象来存储它,但如果你不想改变继承树,那么动态调用可能就是这样。

顺便说一句,如果你创建一个从windows的一个共同祖先继承的新类型,你可以通过编辑源代码并将它继承的类更改为新类来更改windows的基类;只需要一两个地方就可以进行更改。我不知道你所谈论的所有窗口是否都有相同的继承树,所以如果中间子类具有你想要的功能,它可能是不值得的。