分享

在程序中自动关闭表单

 lygcw9603 2011-12-20

在程序中自动关闭表单
红飞狐 出处:网络

  在编制一个应用系统,我们往往会要考虑某些表单的生存时间,某些表单必须在执行某些操作后自动关闭。如我们执行备份程序时,如果采用备份数据库的方法时,因某些表单的数据环境中有打开的表,备份将失败;或者我们采用工具条时,用户在工具条上左点右击,突然出现提示数据表冲突等等。怎么办?能否做到提示用户已打开的窗口和将要打开的窗口有冲突,然后根据用户的选择不作处理或自动关闭不需要的表单?以下是我编制的一个自定义函数,可以实现上述要求。
* 程序名:Gbbd.prg *

* 程序说明:关闭不需要的表单 *

* 程序用途:根据传来的参数关闭不需要的表单 *

* 使用说明:Gbbd("表单标题1|表单标题2|...|",提示信息) *

* 表单标题为保留的表单标题,用'|"分隔 *

Function Gbbd

Para cBlbd,cTsxx

*/将分隔表单标题还原

cBlbd=Alltrim(cBlbd)

If Right(cBlbd,1)<>'|'

cBlbd=cBlbd-'|'

Endif

nZfcd=Len(cBlbd)

For i=1 To nZfcd

If At('|',cBlbd,i)=0

Exit

Endif

Endfor

nBlbds=i-1

If nBlbds=1

Dime cBdbt(1)

cBdbt(1)=Chrtran(cBlbd,'|','')

Else

Dime cBdbt(nBlBds)

For i=1 To nBlbds

If i=1

cBdbt(1)=Left(cBlbd,At('|',cBlbd)-1)

Else

cBdbt(i)=Substr(cBlbd,At('|',cBlbd,i-1)+1,At('|',cBlbd,i)-At('|',cBlbd,i-1)-1)

Endif

Endfor

Endif

nBds=_screen.FormCount

For i=1 to nblbds

cBdbt(i)=Chrtran(cBdbt(i),"|","")

Endfor

*/如果发现系统的表单数大于需保留的表单数,即有表单要关闭,发出提示信息,询问是否自动关闭

If nBds>nBlbds

If MessageBox(cTsxx,4+32+256,"提示信息")=7  &&此处

Retu 0

Endif

Endif

i=nBds

nBdgb=.t.

Do While nBds>nblbds

If i=0

Exit

Endif

For j=1 To nBlbds

If Alltrim(_screen.Forms(1).Caption)=cBdbt(J)

nBdgb=.f.

exit

Else

nBdgb=.t.

Endif

Endfor

If nBdgb=.t.

_screen.Forms(1).Release

nBds=_screen.FormCount

i=nBds

Loop

Endif

If i>_screen.FormCount

i=_screen.FormCount

Endif

For j=1 To nBlbds

If Alltrim(_screen.Forms(i).Caption)=cBdbt(J)

nBdGb=.f.

exit

Else

nBdgb=.t.

Endif

Endfor

If nBdgb=.f.

i=i-1

Loop

Else

_screen.Forms(i).Release

Endif

nBds=_screen.FormCount

i=nBds

Enddo

Retu 1

程序示例:

假如当前打开的表单名有main,toolbar1,sjlr。用户此时点击工具条上的sjbf按钮,而sjbf的打开与sjlr冲突,我们可以在sjbf的load中加入代码:

If Gbbd("toolbar1|main|",'运行sjbf必须关必其他窗口!'+chr(13)+'选择 是 自动关闭,选择 否 不做处理')=0

Retu 0

Endif

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多