我正在使用powerbuilder 9 .0.1 Build 7171我想编写一个通用函数来处理像字体名这样的对象属性.我想更改对象按钮的字体,列表框的想法是我将只传递窗口名称或窗口句柄,函数将获取控件列表,如果control.type是列表框或按钮或图片按钮,它将更改其字体.
我不想为每个窗口编写windows函数,有什么方法可以操作windows的属性
FOR n = 1到UpperBound(Control [])IF Control [n] .TypeOf()= CommandButton!OR Control [n] .TypeOf()= PictureButton!THEN set_button_name(this.Control [n])如果NEXT结束
在这种情况下,我必须在每个窗口的打开事件中对此代码进行硬编码,以通过使用function()来调用它
所以,你真的有两个问题:
控制列表
你有一个隐含的引用窗口的Control数组,这是一个很好的第一步,但可能忽略了像tabs和userobjects这样的对象中的嵌入式控件数组.像下面这样的函数(警告:未经测试,仅用于说明)将递归所有控件,并处理选项卡中的选项卡等案例.
function of_getcontrols (windowobject awo_input[], ref windowobject awo_output[]) returns integer
long ll_Input, ll_InputCount, ll_OutputCount, ll_Sub, ll_SubCount
window lw_Control
userobject luo_UserObject
tab ltb_Tab
windowobject lwo_Empty[], lwo_Sub[]
awo_Output = lwo_Empty
ll_InputCount = UpperBound (awo_Input)
FOR ll_Input = 1 TO ll_InputCount
ll_OutputCount ++
awo_Output[ll_OutputCount] = awo_Input[ll_Input]
// look for nested control arrays
CHOOSE CASE awo_Input[ll_Input].TypeOf()
CASE UserObject!
luo_UserObject = awo_Input[ll_Input]
ll_SubCount = of_GetControls (luo_UserObject.Control, lwo_Sub)
FOR ll_Sub = 1 TO ll_SubCount
ll_OutputCount ++
awo_Output[ll_OutputCount] = lwo_Sub[ll_Sub]
NEXT
CASE Tab!
ltb_Tab = awo_Input[ll_Input]
ll_SubCount = of_GetControls (ltb_Tab.Control, lwo_Sub)
FOR ll_Sub = 1 TO ll_SubCount
ll_OutputCount ++
awo_Output[ll_OutputCount] = lwo_Sub[ll_Sub]
NEXT
END CHOOSE
NEXT
RETURN ll_OutputCount
Run Code Online (Sandbox Code Playgroud)
铸件
下一个问题是如何访问或操作对象的属性,其中编译器不会将该属性的所有权识别为该对象的类型.解决方案是转换为编译器将识别属性关联的类型.您在上面的示例中看到了:
userobject luo_UserObject
...
luo_UserObject = awo_Input[ll_Input]
...luo_UserObject.Control...
Run Code Online (Sandbox Code Playgroud)
编译器不会识别WindowObject和我试图引用的Control数组之间的关联,所以我通过将WindowObject分配给UserObject类型的变量来将WindowObject转换为UserObject.之后,我可以通过该变量引用Control数组.
你将做一些类似于我的事情,可能在一个循环中做一个CHOOSE CASE TypeOf(),然后在每个CASE内部转换为一个匹配类型并在那里操纵属性的特定变量.
我猜你希望有一个单行分配选项,但是在PowerScript中没有.(如果它是你在每个上面调用的一个函数,你可以使用DYNAMIC关键字调用WindowObject上的函数,但是在你调用函数之前确保函数存在是你的责任.)我相信有一种直接的方法用PBNI做到这一点,但我无法帮助你,我强烈怀疑它的努力远远超过它的价值.
祝好运,
特里.
| 归档时间: |
|
| 查看次数: |
6002 次 |
| 最近记录: |