求教自定义函数如何与父类窗口控件通讯的问题,急!

hp_2000 2016-07-08 04:15:46
各位大神,在下面的窗口事件中,因为代码重复量大,想把重复的代码编写成函数,可因为函数中牵涉到父类窗口创建的控件,不知如何引用,所以怎么也写不出来,请大神帮帮忙啊!

主窗口中代码:
long i,ll_row,ll_columns,i_return
oleobject xlapp,xlsub,xlsub1
xlapp = CREATE OLEObject
i_return = xlapp.ConnectToNewObject( "Excel.Application")
if i_return <> 0 then
MessageBox( "提示! ", "Excel连接失败! ")
return
end if
string dept_name,item_head,item_detail,result,unit,reference_value,cue,summary
xlapp.application.workbooks.open(path_name)
xlsub = xlapp.application.activeworkbook.worksheets[1]
ll_row=xlsub.UsedRange.Rows.Count
ll_columns=xlsub.UsedRange.Columns.Count
dw_report.reset() //数据窗口清空
if tab_1.tabpage_2.cbx_xcg.checked then
w_getItemDetail("血常规")
end if
if tab_1.tabpage_2.cbx_shqt.checked then
w_getItemDetail("生化全套")
end if
dw_report.GroupCalc()

//窗口函数代码:w_getItemDetail
int i=6
item_head=string(xlsub.cells(i,4).value)
do while (item_head <> "血常规")
i=i+1
item_head=string(xlsub.cells(i,4).value)
if isnull(item_head) then
item_head=""
end if
loop

do while string(xlsub.cells(i,4).value) = "血常规"
ll_row=dw_report.insertrow(0)
dept_name=string(xlsub.cells(i,2).value)
item_head=string(xlsub.cells(i,4).value)
item_detail=string(xlsub.cells(i,5).value)
result=string(xlsub.cells(i,6).value)
unit=string(xlsub.cells(i,7).value)
reference_value=string(xlsub.cells(i,8).value)
cue=string(xlsub.cells(i,9).value)

dw_report.setitem(ll_row,'dept_name',dept_name)
dw_report.setitem(ll_row,'item_head',item_head)
dw_report.setitem(ll_row,'item_detail',item_detail)
dw_report.setitem(ll_row,'result',result)
dw_report.setitem(ll_row,'unit',unit)
dw_report.setitem(ll_row,'reference_value',reference_value)
dw_report.setitem(ll_row,'cue',cue)
i = i + 1
loop
summary=string(xlsub.cells(i,2).value)+string(xlsub.cells(i,3).value)
dw_report.setitem(ll_row,'summary',summary)
...全文
231 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hp_2000 2016-07-25
  • 打赏
  • 举报
回复
嗯,最终用shared variables解决!instanace variables相当于创建对象,对象的所有属性都会初始化,不符合我继承父类属性的需求。而shared variables可以引用对象 多谢楼上大神的提点
zhangyangziwo 2016-07-19
  • 打赏
  • 举报
回复
离大神差远了,就是用pb时间长而已 窗口的实例变量是在 Declare Instance Variables 选项卡里声明的 父窗口的非私有的变量,可以被子窗口引用的
hp_2000 2016-07-18
  • 打赏
  • 举报
回复
Shared Variables:声明共享变量 ,看来我得用这个了,多谢哈
hp_2000 2016-07-18
  • 打赏
  • 举报
回复
实例变量: 实例变量与对象相关联,只有在该对象的事件处理程序或函数中才能使用为该对象定义的实例变量。实例变量在它所关联的对象被打开时创建,被关闭时消失。 楼上的大神,这还是起不到一个对象被打开后能被多次引用,并记住其中间状态(比如数据读取到哪一行了)的作用啊???
hp_2000 2016-07-18
  • 打赏
  • 举报
回复
哇塞,终于有大神回复了,老激动了 大神,如何将object声明为实例变量啊?
zhangyangziwo 2016-07-15
  • 打赏
  • 举报
回复
oleoject对象 在父类窗口上,声明为实例变量,子类窗口,就能引用了。 你如果在父类窗口的函数内 把 oleoject对象 声明为本地变量, 在子窗口中 的这个函数 里是没有办法使用的, 子窗口中的函数,唯一能得到祖先函数的信息,就是祖先函数的返回值
hp_2000 2016-07-12
  • 打赏
  • 举报
回复
这啥oleoject对象我在其窗口函数中引用,按理属于有效域范围,为啥不让引用呢?
hp_2000 2016-07-11
  • 打赏
  • 举报
回复
终于有解答的人了 主窗口代码在上面部分啊,不是一个函数。 说白了我就是想把主窗口中标注为“//窗口函数代码:w_getItemDetail”下面不断重复的内容写成一个函数调用,不知道咋写啊
zhangyangziwo 2016-07-11
  • 打赏
  • 举报
回复
没看明白呢 主窗口代码是什么?也是一个函数吗? 在主窗口上w_getItemDetail写成空函数 在子类上写具体代码,不行吗?
hp_2000 2016-07-10
  • 打赏
  • 举报
回复
哪位大神帮解答一下啊?

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧