关于opensheet()打开MDI窗口的问题

huerlin 2006-01-04 08:50:34
window w_win
string ls_OpenWinObj

ls_OpenWinObj = w_newwindow
OpenSheet(w_Win,ls_OpenWinObj,parentwindow,0,layered!)

通过以上代码可以打开w_newwindow这个窗口,但打开后如果其他的窗口访问该窗口里面的对象,总提示错误
(Null object reference at lin 22 in open event of object w_childwindow)
现在就是没有w_newwindow这个实例,我在该窗口中写了这段代码:
ll_row = w_newwindow.dw_data.getrow()

因为我写的程序这种访问的太多了,
高手大侠们还有没有什么办法能解决这样的问题,急急呀

回复就给分!
...全文
291 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
robert126 2006-01-05
胡搞瞎搞~~~~~~~~~!!!!!!!!!!!!!
回复
msgtogcra 2006-01-04
可以在 w_newwindow 中定义事件或函数完成其它窗口所需要的操作,w_childwindow 中通过触发事件 w_win.TriggerEvent("ue_xxx") 或动态函数调用 w_win.dynamic Fun_xxx() 的方式访问副本。也就是说,只可直接访问变量的方法,而不可直接访问其属性。
回复
rightyeah 2006-01-04
一般来说,打开窗口的代码应该如下:
window w
opensheet(w,'w_mywin',parentwindow)
//可以把w保存到全局变量里面去,以便后面使用

而操作窗口实例的代码应该如下:
w_mywin w
w=f_getfun() //此处需从全局变量里面取得合适的sheet实例。或用mdi窗口的相关函数查找sheet
w.dw_1.retrieve()
回复
li_d_s 2006-01-04
ls_OpenWinObj = w_newwindow
OpenSheet(w_Win,ls_OpenWinObj,parentwindow,0,layered!)

这两句话大有问题
如果你想通过窗口名字打开窗口,那么应该
ls_OpenWinObj = "w_newwindow"
OpenSheet(w_Win,ls_OpenWinObj,parentwindow,0,layered!)
然后访问的时候就要用w_win.method()了,而且因为你定义的w_win是window类型的,而不是w_newwindow类型的,那么直接访问其实例变量当然是不行的,因为pb没有下溯造型,只能通过dynamic来访问,如果直接定义成 w_newwindow w_win就没问题了
回复
huerlin 2006-01-04
也就是说,如果这种情况打开的是副本对象,我如何这副本的实例呢?
回复
huerlin 2006-01-04
那对于这 程序情况,
我怎样才能访问父窗口中的对象呢?

回复
huerlin 2006-01-04
这个是我临时写的,写错了,就应是字符串
ls_OpenWinObj = 'w_newwindow'

源程序 是这样的

//从数据库读取
SELECT Coalesce(opentype,'opensheet'),Coalesce(OpenWinObj,'') INTO :ls_OpenType,:ls_OpenWinObj FROM hy_sys_menu WHERE TagName=:as_funcode ;
IF Lower(ls_OpenType) = 'opensheet' THEN
OpenSheet(w_Win,Trim(ls_OpenWinObj),awin_parentwin,0,layered!)
ELSEIF Lower(ls_OpenType) = 'opensheetp' THEN
ll_Ret = Pos(ls_OpenWinObj,'|')
IF ll_Ret>0 THEN
ls_OpenPar = Mid(ls_OpenWinObj,ll_Ret + 1,Len(ls_OpenWinObj))
ls_OpenWinObj = Mid(ls_OpenWinObj,1,ll_Ret - 1)
END IF
OpenSheetWithParm(w_Win,ls_OpenPar,Trim(ls_OpenWinObj),awin_parentwin,0,layered!)
ELSEIF Lower(ls_OpenType) = 'open' THEN
Open(w_Win,Trim(ls_OpenWinObj))
END IF
回复
lzheng2001 2006-01-04
把window w_win
改成 w_你想打开的窗口名 w_win



回复
msgtogcra 2006-01-04
我的理解:通过指定窗口类型打开的窗口,实际上打开一个副本的实例,而不是该窗口本身的实例。如果一定要用这种方式 open() 的话,只有通过 TriggerEvent() 或 Dynamic 之类的机制来实现,具体用法可参考 pb 帮助。
回复
bbdx2523 2006-01-04
ls_OpenWinObj = w_newwindow
这一行代码有问题,对象能给字符串变量赋值?
ls_OpenWinObj = w_newwindow.name
回复
xiongxiao 2006-01-04
这段代码可以编译通过吗??
ls_OpenWinObj = w_newwindow//你是临时写在这的,还是COPY过来的

你都没有打开w_newwindow,哪来的实例,你打开的是W_WIN
回复
相关推荐
发帖
脚本语言
创建于2007-09-28

730

社区成员

PowerBuilder 脚本语言
申请成为版主
帖子事件
创建了帖子
2006-01-04 08:50
社区公告
暂无公告