注册 登录
编程论坛 VFP论坛

为什么会产生循环?

cluna2013 发布于 2020-06-22 12:26, 3273 次点击
只有本站会员才能查看附件,请 登录

由于表单不认FUNCTION...ENDFUNC语句,我使用.prg运行。但是不知哪里出了问题,点击程序文件,确定目录,接下来就失控了。拜请各位高手诊断参谋一下。
12 回复
#2
cluna20132020-06-22 13:50
下面是程序代码:
SET SAFETY OFF           && 指定在改写已有文件时不显示对话框
SET TALK OFF            && 阻止对话结果发送到 Visual FoxPro 主窗口、系统信息窗口、图形状态栏或用户自定义窗口
SET SYSMENU OFF         && 在程序执行期间废止 Visual FoxPro 主菜单栏
SET DATE ANSI            && 设置中国日期格式为yy.mm.dd
SET HOURS TO 24            && 将时间设为24小时制
SET CENTURY ON            && 设置日期格式为带世纪的
SET PATH TO CURDIR()    && 设置当前路径为默认路径

PUBLIC wjno
wjno=0

DO WHILE wjno<5
DO CASE
CASE wjno=0 OR wjno=2
    DO FORM \Form\wjtran.scx
    READ EVENTS
CASE wjno=1
    DO wj01
    DO FORM \Form\wjtran.scx
    READ EVENTS
ENDCASE
ENDDO

PROCEDURE wj01    && 存档程序
WAIT

CREATE TABLE files0 (文件名 C(100), 文件大小 N(13), 修改日期 T, 类型 C(3), 路径 C(80))    && 创建表
listfiles([&listfiles])                        && 建立listfiles函数
FUNCTION ListFiles(tcFolder)                && 自定义路径函数
    LOCAL ARRAY laFiles[1]                    && 创建的数组laFiles,[1]表示一组。
    LOCAL lcFileName, ii
    m.tcFolder = ADDBS(m.tcFolder)            && 向路径表达式添加一个反斜杠。
    IF ADIR(m.laFiles, m.tcFolder + '*.*', 'AHRSD', 1) < 3        && 若是文件长度小于3个字节,则不计算。
        RETURN .F.
    ENDIF
    ASORT(m.laFiles, 3, -1, 1)                && 按第3列排序数组,最后一位数大于0为降序排序。
    FOR m.ii = 1 TO ALEN(m.laFiles, 1)        && 返回数组中元素、行或列的数目。
        m.lcFileName = m.laFiles[m.ii, 1]
        DO CASE
            CASE '.' == m.lcFileName Or '..' == m.lcFileName
            CASE AT('D', m.laFiles[m.ii, 5]) > 0                && 在一个字符表达式中查找另一个字符表达式出现的位置。
               ListFiles(m.tcFolder + m.lcFileName)
            OTHERWISE
                lafilesdt1=DTOC(m.lafiles[m.ii, 3])
                lafilesdt2=m.lafiles[m.ii, 4]
                m.lafiles[m.ii, 3]=CTOT([&lafilesdt1 &lafilesdt2])
                INSERT INTO files0 VALUES (m.lafiles[m.ii, 1], m.lafiles[m.ii, 2], m.lafiles[m.ii, 3], JUSTEXT(m.lafiles[m.ii, 1]), m.tcFolder)    && 将数据录入到表中。
        ENDCASE
    ENDFOR
wjno=0
RETURN
ENDFUNC                && 标识 FUNCTION 结构的结束。
#3
cluna20132020-06-22 13:54
下面是表单【主目录】按钮代码:
listfiles=GETDIR()
wjno=1
DO \Prg\wjtran
USE files0
COPY TO files1

点击wjtran.prg之后,出现wjtran.scx界面;点击【主目录】之后,出现循环。
#4
sdta2020-06-22 14:50
表单中有自定义方法,类似于自定义函数
#5
gs25367856782020-06-22 15:08
对了,你的自定义函数要放进表单里面
#6
cluna20132020-06-22 16:00
回复 4楼 sdta
如何在表单中建立自定义函数呢?
#7
cluna20132020-06-22 16:47
回复 4楼 sdta
只有本站会员才能查看附件,请 登录
表单【新建方法程序】添加不了程序啊?
#8
cluna20132020-06-22 16:52
到这一步,如何写代码?
只有本站会员才能查看附件,请 登录
#9
瓜瓜19902020-06-22 18:37
打开表单的[属性]窗口->选择[方法程序]页框,最下边就是新添加的方法,双击就可以编辑
#10
cluna20132020-06-22 19:05
回复 9楼 瓜瓜1990
不能存盘,不行啊!
只有本站会员才能查看附件,请 登录
#11
瓜瓜19902020-06-23 00:03
回复 10楼 cluna2013
表单的过程里不能再定义新函数了.只把原先定义的函数内的代码放表单的过程里就好了.
或者单独建一个过程文件,把函数放里面,随时调用


[此贴子已经被作者于2020-6-23 12:26编辑过]

#12
cluna20132020-06-23 08:50
回复 11楼 瓜瓜1990
“只把原先定义的函数的代码放表单的过程里就好了.”
无论放在哪,都不认。我是第一次使用FUNCTION……ENDFUNC,才知道与PROCEDURE不一样。
而作为.prg单独使用很好。

[此贴子已经被作者于2020-6-23 09:42编辑过]

#13
cluna20132020-06-23 11:06
FUNCTION……ENDFUNC在.prg中使用很好,但是不被表单接受。哪位高手曾经在表单中使用过FUNCTION……ENDFUNC成功的案例,希望分享!
1