Foxpro中多输入窗口的两种实现方法 1996-11-22 使用逐级调用的方法。例如共有三个输入屏幕P1、P2、P3,数据库为P.DBF. A.使用SCREEN BUILDER生成屏幕P1,其中用PUSH BUTTON调用P2和P3屏幕,其伪代码段如下: DO CASE …… CASE 按了“调用P2”按键 DO P2.SPR CASE 按了“退出”键 CLEA READ …… ENDCASE B.使用SCREEN BUILDER生成屏幕P2,其中用PUSH BUTTON返回P1和调用P3屏幕,其伪代码段如下: DO CASE …… CASE 按了“返回P1”按键 CLEA READ CASE 按了“调用P3”按键 DO P3.SPR …… ENDCASE C.使用SCREEN BUILDER生成屏幕P3,其中用PUSH BUTTON返回P2屏幕,其伪代码段如下: DO CASE …… CASE 按了“退出”键 CLEA READ *返回P2屏幕 …… ENDCASE D.运行该组窗口时用DEBUG窗口查看RDLEVEL()(该函数返回当前READ嵌套的级数),当进入P3窗口时RDLEVEL()返回3,即已经进入了第三级READ。另外由于每次切换窗口实际是运行另一个窗口,所以其速度非常慢。同时它不能实现页间的自由切换,只能按“P1<-->P2<-->P3”的顺序执行,并且其致命缺陷是一旦管理的窗口达到了6个,则该方案无法实现。 实现方案二:使用SCREEN SET方案,结合OBJNUM()函数。 A.同时打开P1、P2、P3三个窗口,然后一起生成“.SPR”屏幕集文件。 B.其中P1窗口的PUSH BUTTON的伪代码为: DO CASE …… CASE 按了“调用P2”按键 -CUROBJ=OBJNUM(“P2窗口的第一个输入字段名”) CASE 按了“调用P3”按键 -CUROBJ=OBJNUM(“P3窗口的第一个输入字段名”) CASE 按了“退出”键 CLEA READ …… ENDCASE P2、P3的代码段和P1类似。 C.使用RDLEVEL ()查看READ的级数,发现在P1、P2、P3窗口之间切换时其级别均为1级,同时其切换速度远远比方案一要快,因为其窗口在一开始就全部运行,切换时仅仅是现存窗口的切换而不是窗口在切换运行,显然,理论上用此方案能方便地实现无穷多个窗口的管理。