VFP5中实现菜单、表单与工具条的动态连接 刘露军 1999年 第23期 13版 #1 一、表单与菜单的连接 用VFP构建应用程序时,往往通过主菜单调用表单完成相应功能模块,其实我们可以像WORD打开文档一样将每一个打开的表单显示在Window菜单上,以便于切换。具体步骤如下: 1. 创建一表单类MyForm,新建向菜单项Window追加、删除表单名的方法:AddFormNameToMenu、RemoveFormNamefromMenu,同时修改init、activate、destroy方法。 2. 设置表单类MyForm为新建表单的模板类即可。 #1 二、表单与工具条的连接。 在应用系统中对表单的操作往往有很多相同之处,所以我们可以针对多个表单使用一个工具条,以节省表单空间。具体步骤如下: 1. 利用工具条基类ToolBar创建一工具条类MyTBR,然后向工具条中添加命令按钮,在每个按钮的click事件中调用激活表单中的相应方法,例如:_screen.activateform.first()。由于每个表单的方法可写入不同的代码,从而实现用一个工具条控制不同的表单及操作。 2. 创建应用程序类MyAPP,添加属性nFormInstanceCount、oToolBar,其初始值分别为0、NULL。新建显示、隐藏工具条的方法:ShowAppToolBar、RemoveAppToolBar。在主程序中建立MyAPP实例:oAPP=createobject(′MyAPP′) 3. 修改表单类MyForm,添加属性cToolbar,其初始值为MyTBR;添加相应方法(例如first)。同时修改init、destroy方法。 #1 三、源代码 AddFormNameToMenu() if cntbar(′window′)=0 or getbar(′window′,cntbar(′window′))<0 nNoMenu=cntbar(′window′)+1 else nNoMenu=getbar(′window′,cntbar(′window′))+1 endif define bar nNoMenu of window prompt thisform.caption; after _mlast cNameform=thisform.name on selection bar nNoMenu of window activate window &cNameform RemoveFormNamefromMenu() local nBar,cCaption for nBar=cntbar(′window′) to 1 step -1 if prmbar(′window′,getbar(′window′,nBar))=this.caption release bar getbar(′window′,nBar) of window exit endif endfor Init() local nNomenu,cNameform if !empty(thisform.cToolbar) thisform.Addformnametomenu() oAPP.showapptoolbar(thisform.cToolbar) endif Activate() activate menu _msysmenu nowait Destroy() if !empty(thisform.cToolbar) thisform.removeformnamefrommenu() oAPP.removeapptoolbar() endif ShowAppToolBar() lpara tcToolBar if this.nforminstancecount=0 or isnull(oAPP.oToolbar) set sysmenu on set classlib to basetbr this.oToolbar=createobject(′MyTBR′) this.oToolbar.show() activate menu _msysmenu nowait set sysmenu automatic endif this.nforminstancecount=this.nforminstancecount+1 RemoveAppToolBar() this.nforminstancecount=this.nforminstancecount-1 if this.nforminstancecount=0 this.otoolbar=.NULL. endif