标题:表单 init中用数组做参数?
只看楼主
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
结帖率:98.96%
已结贴  问题点数:20 回复次数:4 
表单 init中用数组做参数?
表单 init中用数组做参数?
我在表单的 INIT中用数组做参数,
*表单 init
PARAMETERS laTabNm,laTabTb,laTabYb,lcTxt
if type("laTabNm",1)="A" and type("laTabTb",1)="A" and type("laTabYb",1)="A"
   *由于这些参数laTabNm,laTabTb,laTabYb,lcTxt,好像不能用在表单的其他地方去
   *定义另外的参数来代替他们
   n=alen(laTabNm)
   public aSqlNm(n),aSqlTb(n),aSqlYb(n)
   for i=1 to n
      aSqlNm(i)=laTabNm(i)
      aSqlTb(i)=laTabTb(i)
      aSqlYb(i)=laTabYb(i)
   endfor
endif
以上代码,单独运行 这个表单时,是可以正常运行的。
但奇怪的是,编译时,报错:
  未知的 LATABNM - 未定义
  未知的 LATABTB - 未定义
  未知的 LATABYB - 未定义
为了对付他,我只好在LOAD 中
*表单 LOAD
PUBLIC laTabNm[1],laTabTb[1],laTabYb[1]
就可以编译了,也能正常运行
但觉得怪怪的,,
调用这个表单时
DIME ary1(2),ary2(2),ary3(2)
ary1(1)="a1"
ary1(2)="a2"
ary2(1)="b1"
ary2(2)="b2"
ary3(1)="c1"
ary3(2)="c2"

DO FORM loadbar.scx WITH ary1,ary2,ary3

      


搜索更多相关主题的帖子: public 
2016-04-16 15:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 
是不是要用@ 传址

坚守VFP最后的阵地
2016-04-16 21:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
编译时与运行时不同,编译时解释不了未定义的数组。
如:

DIMENSION bb[1]
bb[1] = "bbbbb"
ff(@bb)
RETURN

FUNCTION ff(aa)
    MESSAGEBOX(aa[1])
ENDFUNC

显然 aa 数组是未声明定义,编译时解释不了aa[1]会提示“找不到未知的AA”,忽略就可以,运行时调用ff(@bb)是能正常解释执行的。

2016-04-16 22:07
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以下是引用吹水佬在2016-4-16 22:07:34的发言:

编译时与运行时不同,编译时解释不了未定义的数组。
如:
 
DIMENSION bb[1]
bb[1] = "bbbbb"
ff(@bb)
RETURN
 
FUNCTION ff(aa)
    MESSAGEBOX(aa[1])
ENDFUNC
 
显然 aa 数组是未声明定义,编译时解释不了aa[1]会提示“找不到未知的AA”,忽略就可以,运行时调用ff(@bb)是能正常解释执行的。
 
奇怪,函数中用数组参数,是要要@,但我测试了,在表单中INIT参数,加@会出错。
只能
DO FORM loadbar.scx WITH ary1,ary2,ary3 &&不出错,也能正确传参数进去

DO FORM loadbar.scx WITH @ary1,@ary2,@ary3 &&出错





2016-04-16 23:23
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
VFP帮助:
PARAMETERS  将调用程序传来的数据赋值给私有内存变量或数组。
LPARAMETERS 将调用程序传入的数据,赋值给局部内存变量和数组。

在 DO FORM ... WITH ...是按地址传送:

DIMENSION bb[3]
bb[1] = "bb1"
bb[2] = "bb2"
bb[3] = "bb3"
cc = "ccc"
DO FORM 表单1.scx WITH bb, cc
READ EVENTS
MESSAGEBOX(bb[2]+",  "+cc) &&被改写
RETURN

其中:
* form.Init
LPARAMETERS aa, dd
MESSAGEBOX(aa[2]+",  "+dd)
aa[2] = "3333"
dd = "4444"


[此贴子已经被作者于2016-4-17 06:25编辑过]

2016-04-17 06:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463720-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.333385 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved