有没有人指导我一下?非常简单的常识问题。

tanyx 2003-08-17 02:14:43
在VB里,用 sub abc 来建立一个子程序,然后 CALL 它,在VF里呢?
VB:
sub abc(参数)
.....
end sub

调用:
call abc(参数)

就不知道在VF里怎么做了。
...全文
76 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
heavenmusic 2003-08-26
  • 打赏
  • 举报
回复
以下,你应该得懂....我以前也学习过VB!

这是语法:
PROCEDURE ProcedureName
[LPARAMETERS parameter1[,parameter2},...]
Commands
[RETURN [eExpression]]
ENDPROC
或者

PROCEDURE ProcedureName([parameter1[AS para1type][,parameter2
[AS para2type]],...]) [AS returntype]
Commands
[RETURN [eExpression]]
ENDPROC


这是例子: (自已看)
DO MakeLogEntry WITH "Logged in", "jsmith"

PROCEDURE MakeLogEntry
PARAMETERS message, username
pnHandle = FOPEN("LOG2.TXT",2) && 假定文件存在
pnSize = FSEEK(pnHandle,0,2) && 移到文件尾
logEntry = dtoc(date())+","+time()+","+username+","+message
=FPUTS(pnHandle, logEntry)
=FCLOSE(pnHandle) && 关闭文件
ENDPROC
以下示例显示如何调用过程来返回一个值。

SET CENTURY ON
? longdate(({^1998-02-16})) && 显示 Monday, February 16, 1998

PROCEDURE longdate
PARAMETER mdate
RETURN CDOW(mdate) + ", " + MDY(mdate)
ENDPROC
tanyx 2003-08-26
  • 打赏
  • 举报
回复
无论如何,还是应该奖励笨鸟的热心啊。结!
fj_jiangqi 2003-08-17
  • 打赏
  • 举报
回复
不是很明白你的意思。

用来调用的过程可以是一个文件,文件名为过程名或函数名。
第一句加上parameters vallist用来接收参数,可以是类,如:
文件allcall.prg
parameters _textbox
_textbox.value="abc"
return

在表单中调用:do allcall with thisform.text1或=allcall(thisform.text1)
不知是否理解了你的意思,在vb中能实现的在vf中通常也都能实现。
-------------------------
我流落在凄凉的世界里-孤苦伶仃
我过着动荡无助的生活-四处漂泊
Foxer 2003-08-17
  • 打赏
  • 举报
回复
DO FORM ABC NAME ABC LINKED
ABC.Text1.value = "abc"

需要注意的是:表单ABC的WindowType=0

tanyx 2003-08-17
  • 打赏
  • 举报
回复
还是VF没有这个能力呢?
tanyx 2003-08-17
  • 打赏
  • 举报
回复
大家来看啊,是否我没说明白呢?
mgan 2003-08-17
  • 打赏
  • 举报
回复
在控件的属性代码里面 调用
如果还不可仪的话 请发到我的信箱里面 我给你看看 下午还有点事情 回头给你看看
lymg6768@sohu.com
tanyx 2003-08-17
  • 打赏
  • 举报
回复
这个笨鸟啊,真是笨得可以,怎么都不明白
tanyx 2003-08-17
  • 打赏
  • 举报
回复
再说白点吧,窗体文件叫 ABC.scx,窗体名叫form1,上面有个部件叫text1,
这些都明白吗?
然后,我在窗体的初始化程序 form1_init里面执行这句话:
do setff
明白吗?
然后在 setff.prg 里面有一句话,叫做:
abc.form1.text1.value="abc"

问题就是:系统不认识这句话。
mgan 2003-08-17
  • 打赏
  • 举报
回复
呵 你把 一个程序保存起来呀
放在某个地方
然后需要的时候调用他就可以 了
比如说在 某个..\我的系统里面
SET PROCEDURE TO ..\我的系统\ MYPRG.PRG
再调用其中的变量就可以了
和VB里面一样的

其实指定子程序或过程的位置即可啊


tanyx 2003-08-17
  • 打赏
  • 举报
回复
proc 和 function 我都知道,干脆说吧,我那个控件怎么办啊?如何改变属性呢?
mgan 2003-08-17
  • 打赏
  • 举报
回复
呵 把上面的 仔细 看看
其实和 qb,c,VB,vc 都是一样的 啊
我给了整个的说明给你就是让你把所以的弄明白啊
tanyx 2003-08-17
  • 打赏
  • 举报
回复
我只是想把 form_init 里的一段程序拉出来独立执行,以便在其他地方也可以调用啊,简单说吧,怎么办?

我知道了,这在VF里是个很难的问题,所以大家都不愿意互相指导啊。

其实我刚文过了一个VF专家的,其实他会,但就是不告诉我怎么做。
tanyx 2003-08-17
  • 打赏
  • 举报
回复
可是这事情有这么复杂吗?
我在A程序里 do B 过程,目的是设置 A程序里的控件的属性啊,于是:
在 A 里:do B

又在B里执行:
....
A.text1.value='abc'

再说了啊,目的只是在A里面要多次调用B,有没有简单的方法呢?
mgan 2003-08-17
  • 打赏
  • 举报
回复
那是 过程 还有一个函数
他的形式为
FUNCTION 函数名

[PARAMETERS 参数表]

函数体

RETURN [表达式]

FUNCTION是函数的标识符,后面是函数名,同过程名一样,它是该函数的唯一标识,它的名字不允许同FOXPRO中的其它关键字及函数、过程同名。PARAMETERS和RETURN关键字的用法是和过程及子程序是相同的。每一个函数有一个函数体,它也是由一系列的代码组成,来完成特定的任务。

其次在调用上也和过程有一些差别。

函数的调用:

函数名([参数表])

函数可以出现在任何表达式中,并与FOXPRO的标准函数一样调用。当FOXPRO执行到表达式中的自定义函数时,就钻进函数里执行函数体的代码,在遇到RETURN语句时,便用表达式的值返回并替代函数名参与调用函数时的表达式的计算。

最后在用法上也要灵活运用。如果要在表达式中使用且只返回一个值,并且该值只在一处调用,则应定义为函数;若定义为过程,则值作参数返回,返回的参数才能应用到表达式中,但可将一个值用在多个地方。在其他情况下,不论是用在表达式中,也不论是否返回值或多少个值,则应定义为过程。

下面我们定义一个自定义函数MYQUERY()。他的功能与MYLOCATE子程序一样。我们也把他加入到MYPRG.PRG过程文件中。新的MYPRG.PRG过程文件的内容如下:

**************MYPRG.PRG*************

PROCEDURE NEWHELLO &&定义第一个过程

PARAMETERS C_HELLO &&用来接收参数。

MESSAGEBOX(C_HELLO)
RETURN

 

PROCDEURE MYQUERY && 定义第二个过程

PARAMENTERS TJ &&形式参数

USE 人事管理
GO TOP
LOCATE FOR NAME = TJ
IF EOF()
RETURN .F.
ELSE
RETURN .T.
ENDIF

 

FUNCTION MYQUERY && 定义函数

PARAMENTERS TJ &&形式参数

USE 人事管理
GO TOP
LOCATE FOR NAME = TJ
IF EOF()
RETURN .F.
ELSE
RETURN .T.
ENDIF


在调用时的形式如下:

SET PROCEDURE TO MYPRG.PRG

?MYQUERY('庄稼')

不知道 你是否明白了呢?
mgan 2003-08-17
  • 打赏
  • 举报
回复
VFP里面是这样的 就是‘过程’概念。

其实过程和子程序是一回事儿,只不过是把多个子程序保存在一个PRG文件中。在PRG文件里每个子程序单独定义罢了。而保存多个子程序的PRG文件我们称为”过程文件”。

在过程文件写子程序不能象我们单独建立子程序时一样直接就开始写代码。那样的话分不清哪段代码属于哪段子程序了。要先对子程序进行定义,也就是定义一个过程。

过程的定义形式是:

PROCEDURE 过程名

[PARAMETERS PARS1[,PARS2….]]

过程体

RETURN TO [程序名]

PROCEDURE 是标识过程定义的关键字,“过程名”是标识此过程的名字,它就象人的名字一样,只不过人的名字是用来区分人的而“过程名”用来标识标识过程的。但有一点“过程名”与人名不太一样,人的名字可以重复,虽然也会出麻烦但问题不是很大,“过程名”就不一样了,它要求必须是唯一的,最好还能表达过程的主要功能。电脑可没有哪么聪明会区分两个同名的过程。

PARAMETERS和RETURN的用法和我们讲过的子程序的用法一样,就不多唠叨了。

调用过程的方法也和调用子程序的方法一样。但是要注意一点,在调用过程时要指出包含在哪个过程文件中。方法有两个:

一、DO 过程名 [WITH 参数表] [IN 过程文件],IN关键字指出定义过程的过程文件。

二、必须在调用前加上一个语句:SET PROCEDURE TO 过程文件名(带扩展名)

它打开指定的过程文件,该文件中的过程就可以直接用 DO 过程名 调用了。

讲完了过程以后我们就可以把前面的NEWHELLO子程序和MYLOCATE子程序和并到一个过程文件里了。我们用MYPRG.PRG来保存。

**************MYPRG.PRG*************

PROCEDURE NEWHELLO &&定义第一个过程

PARAMETERS C_HELLO &&用来接收参数。

MESSAGEBOX(C_HELLO)
RETURN

 

PROCDEURE MYQUERY && 定义第二个过程

PARAMENTERS TJ &&形式参数

USE 人事管理
GO TOP
LOCATE FOR NAME = TJ
IF EOF()
RETURN .F.
ELSE
RETURN .T.
ENDIF


我们调用时用下面的形式调用就行了.

SET PROCEDURE TO MYPRG.PRG &&将过程文件打开

DO NEWHELLO WITH “吃了吗?”

DO MYLOCATE WITH “庄稼” TO TC

?TC

 

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧