Foxpro中多输入窗口的两种实现方法

Author: Date: 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级,同时其切换速度远远比方案一要快,因为其窗口在一开始就全部运行,切换时仅仅是现存窗口的切换而不是窗口在切换运行,显然,理论上用此方案能方便地实现无穷多个窗口的管理。