注册 登录
编程论坛 VFP论坛

上级表单如何给下一级被调用表单传变量值(非全局变量)?

强国学习 发布于 2021-02-26 12:32, 1832 次点击
请问如何实现:表单1里有一个表格grid1,数据来源于一个表,里面的数据是通过APPEN FROM写入表并通过grid1即时显示出来的,通过双击grid1第2行TEXT1事件,打开另一个表单2,并把行号2传给表单2使用?
18 回复
#2
吹水佬2021-02-26 18:42
DO FORM 命令的 WITH 参数
如果打开表单2时表数据记录指针没移动,在表单2直接对表操作就可以。
#3
强国学习2021-03-01 08:15
回复 2楼 吹水佬
比如指针指向行号3,要操作行号2,我原来是用了do form form1 with 2命令,在表单2的init事件中加入了parameter hh,在avtivate事件中有sele 表,go hh命令,运行执行到go hh 时提示命令错误。
#4
吹水佬2021-03-01 09:42
回复 3楼 强国学习
出错提示什么内容?
参考示例:
只有本站会员才能查看附件,请 登录

程序代码:
CREATE CURSOR tt (f1 I, f2 I)
FOR i=1 TO 10
    INSERT INTO tt VALUES (i, 2*i)
ENDFOR
GO 3
of = CREATEOBJECT("form1")
of.show(1)
RETURN

DEFINE CLASS form1 as Form
    ADD OBJECT cmd1 as CommandButton WITH Top=10,Left=10,Height=22,Caption = "form2"
    PROCEDURE init
        this.Caption = "当前记录号:"+TRANSFORM(RECNO())
    ENDPROC
    PROCEDURE cmd1.Click
        of2 = CREATEOBJECT("form2",2) &&相当于 do form form2 with 2
        of2.show(1)
    ENDPROC
ENDDEFINE

DEFINE CLASS form2 as Form
    top = 100
    left = 100
    PROCEDURE init(n)
        GO n
        this.Caption = "当前记录号:"+TRANSFORM(RECNO())
    ENDPROC
ENDDEFINE

或者:
程序代码:
CREATE CURSOR tt (f1 I, f2 I)
FOR i=1 TO 10
    INSERT INTO tt VALUES (i, 2*i)
ENDFOR
GO 3
of = CREATEOBJECT("form1")
of.show(1)
RETURN

DEFINE CLASS form1 as Form
    ADD OBJECT cmd1 as CommandButton WITH Top=10,Left=10,Height=22,Caption = "form2"
    PROCEDURE init
        this.Caption = "当前记录号:"+TRANSFORM(RECNO())
    ENDPROC
    PROCEDURE cmd1.Click
        GO 2
        of2 = CREATEOBJECT("form2") &&相当于 do form form2
        of2.show(1)
    ENDPROC
ENDDEFINE

DEFINE CLASS form2 as Form
    top = 100
    left = 100
    PROCEDURE init
        this.Caption = "当前记录号:"+TRANSFORM(RECNO())
    ENDPROC
ENDDEFINE
#5
强国学习2021-03-01 13:08
回复 4楼 吹水佬
老师麻烦您帮看看,我是想把do from xjxg1 with 2 的2传给表单xjxg1中的activate事件的 go hh选择行号用,意思是go hh就是go 2。当
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
go hh时提示命令错误,go alltrim(hh)时提示函数参数的值或类型无效。
#6
sdta2021-03-01 13:15
只有本站会员才能查看附件,请 登录
#7
sdta2021-03-01 13:17
go alltrim(hh)时提示函数参数的值或类型无效。
改为
go hh
#8
吹水佬2021-03-01 14:13
回复 5楼 强国学习
1、在init过程定义的hh是局部变量,init过程结束后就被释放,在执行Activate过程时hh变量不存在。
2、在init过程将hh保存在一个自定义的表单属性,在执行Activate过程时调用。
3、在Activate事件改变记录指针时要注意Activate事件的触发条件,程序运行时有可能会多次触发Activate事件。


#9
强国学习2021-03-01 16:41
回复 8楼 吹水佬
老师麻烦您直接给出获取到2的语句,谢谢!
#10
吹水佬2021-03-01 18:19
以下是引用强国学习在2021-3-1 16:41:34的发言:

老师麻烦您直接给出获取到2的语句,谢谢!

可以参考4楼,具体变通一下就OK
#11
foxprosue2021-03-02 09:31
学习
#12
强国学习2021-03-02 12:55
回复 10楼 吹水佬
自定义了一个表单属性dh,默认值为.F.,改成了0。
一、form1调用form2语句
     do form xjxg1 with 2
        read even
        thisform.refresh
        thisform.edit3.setfocus
二、form2的Init事件
    parameters hh
    this.dh=val(alltrim(transform(hh)))
三、form2的activate事件
    sele qyrq_l1
         n=this.dh
         ?n
         ?type('n')
         go n
         dime g[1,61]
              scatt to g
执行后,n为0.00,类型为N,go n 语句出错,提示超出最大范围。即n未取得do form xjxg1 with 2 的数值2,请问老师,这个问题出在哪里?
#13
吹水佬2021-03-02 14:43
回复 12楼 强国学习
改改试试:
一、form1调用form2语句
     do form xjxg1 with 2
     thisform.refresh
     thisform.edit3.setfocus
二、form2的Init事件
    parameters hh
    this.dh=hh
三、form2的activate事件
    sele qyrq_l1
    go this.dh
    dime g[1,61]
    scatt to g
#14
强国学习2021-03-02 16:39
回复 13楼 吹水佬
go this.dh 提示语法错误
this.dh 的值是.F.,类型是L
VFP6.0版本

[此贴子已经被作者于2021-3-2 16:56编辑过]

#15
吹水佬2021-03-02 22:12
以下是引用强国学习在2021-3-2 16:39:02的发言:

go this.dh 提示语法错误
this.dh 的值是.F.,类型是L
VFP6.0版本

this.dh的类型可以赋值为数值型
给个表单的示例:
只有本站会员才能查看附件,请 登录

#16
强国学习2021-03-03 15:22
回复 15楼 吹水佬
老师您好,请问do form formname with 参数 命令,是不是只能放在按钮command里才能有作用?
我在调用表单1增了个按钮command,里面放入do form xjxg1 with 2测试,点这个按钮,被调用表单2接收到了表单1传过来的2.
但是在grid1的一个text1里的双击事件里放入do form xjxg1 with 2,双击text1时,被调用表单2接收不到表单1传过来的2.
或者是要把text1的某个属性改成和command的属性一样才能传送?
有可能是表单2是从表单1复制过来的原因,我重新建了两个简单的表单来试,在grid1里的text1里do form formname with 参数,另一个表单是可以接收到参数的。

[此贴子已经被作者于2021-3-3 16:42编辑过]

#17
radiofan2021-03-05 08:48
以下是引用吹水佬在2021-3-1 14:13:43的发言:

1、在init过程定义的hh是局部变量,init过程结束后就被释放,在执行Activate过程时hh变量不存在。
2、在init过程将hh保存在一个自定义的表单属性,在执行Activate过程时调用。
3、在Activate事件改变记录指针时要注意Activate事件的触发条件,程序运行时有可能会多次触发Activate事件。


3、在Activate事件改变记录指针时要注意Activate事件的触发条件,程序运行时有可能会多次触发Activate事件。  (对的!)
#18
radiofan2021-03-05 08:51
表单间传递值,可以公共变量,可以表单添加属性,可以do form formname with …… ,灵活运用。
#19
foxprosue2021-03-08 08:40
学习
1