PB打开子窗口不能,望高手指教

yf52393975 2010-11-12 02:19:03
public subroutine of_opensheet (string win_type, string win_name, string win_parm);
window lw_sheet
lw_sheet = getfirstsheet()
do while isvalid(lw_sheet)
if trim(lw_sheet.tag) = trim(str_lastfunc.func_id) then
lw_sheet.bringtotop = true
exit
end if
lw_sheet = getnextsheet(lw_sheet)
loop
if not isvalid(lw_sheet) then
opensheetwithparm(lw_sheet,win_parm,win_name,this,20,layered!)
end if
end if


我点选主窗体的一个图标后,希望打开具体的某个程序。跑到如上的语句,应该是得到子窗口的名称,
但是现在的情况是:为什么得到lw_sheet就是null,
我在lw_sheet = getfirstsheet()的时候,lw_sheet是有值的,是window(29963444),
但是lw_sheet.tag就是“”,而getnextsheet(lw_sheet)就是null,
问题是:1.getfirstsheet()是哪个window的getfirstsheet(),
2.window(29963444)怎么查看具体哪个window,比如说w_xxx_1_0101之类的,
3.getnextsheet(lw_sheet)能帮我解释下意思吗?
4.怎样使我的程序能打开子窗体。
学习下,请高手指教
...全文
629 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yf52393975 2010-11-17
  • 打赏
  • 举报
回复
谢谢,已经研究出来这个问题了,
opensheetwithparm(lw_sheet,win_parm,win_name,this,20,layered!)
中lw_sheet如果有值的话,表明已经打开的窗口,
没有值的话,才会去打开win_name的窗口,
zlf19810306 2010-11-12
  • 打赏
  • 举报
回复
'w_store_area' 替换为win_name ,这是偶测试时写的代码
zlf19810306 2010-11-12
  • 打赏
  • 举报
回复
lw_sheet = getfirstsheet()
之后就判断lw_sheet是否有效

如果IsValid(lw_sheet)为 true ,代表lw_sheet有效,false无效
看看如下代码是否是你要的结果,没有win_name的窗口,就打开,有的话就激活已经打开的窗口
window lw_sheet
boolean lb_exist = false
lw_sheet = getfirstsheet()
if isvalid(lw_sheet) then
if lw_sheet.classname() = 'w_store_area' then
lw_sheet.SetFocus()
else
lw_sheet = getnextsheet( lw_sheet)
do while isvalid(lw_sheet)
if lw_sheet.classname() = 'w_store_area' then
lw_sheet.setfocus()
lb_exist = true
exit
end if
lw_sheet = getnextsheet( lw_sheet)
loop
if not lb_exist then
opensheetwithparm(lw_sheet,win_parm,win_name,this,20,layered!)
end if
end if

else
opensheetwithparm(lw_sheet,win_parm,win_name,this,20,layered!)
end if


xiaobn_cn 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 yf52393975 的回复:]
1.getfirstsheet()是哪个window的getfirstsheet(),
2.window(29963444)怎么查看具体哪个window,比如说w_xxx_1_0101之类的,
3.getnextsheet(lw_sheet)能帮我解释下意思吗?
4.怎样使我的程序能打开子窗体
[/Quote]

1. 该函数是MDI窗口的函数
2. 使用lw_sheet.ClassName()可以取得窗体的类名
3. 在MDI窗口中可以打开多个sheet窗口,getnextsheet可以获取参数指定sheet窗口的下一个sheet窗口,一般用于循环MDI中的所有sheet
4. 只要使用OpenSheet就可以了,最简单的用法是OpenSheet ( w_sheet1 )
zlf19810306 2010-11-12
  • 打赏
  • 举报
回复
如果你的MDI没有打开其他的子窗口的话。lw_sheet = getfirstsheet()返回的是无效值,这个无效值会导致opensheetwithparm抛出错误并且不返回值
yf52393975 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuam 的回复:]

Description

Obtains the top sheet in the MDI frame, which may or may not be active.

Controls

MDI frame windows

Syntax

mdiframewindow.GetFirstSheet ( )

Argument Description
mdifr……
[/Quote]

我汗呀,你不要把F1的东西给我看呢,我当然知道有问题先看F1的
xuam 2010-11-12
  • 打赏
  • 举报
回复
Description

Obtains the top sheet in the MDI frame, which may or may not be active.

Controls

MDI frame windows

Syntax

mdiframewindow.GetFirstSheet ( )

Argument Description
mdiframewindow The MDI frame window for which you want the top sheet
Return value

Window. Returns the first (top) sheet in the MDI frame. If no sheet is open in the frame, GetFirstSheet returns an invalid value. If mdiframewindow is NULL, GetFirstSheet returns NULL.

794

社区成员

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

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