vb 自定义函数怎么定义和调用

vb 自定义函数怎么定义和调用,第1张

VB的自定义函数也就是自己根据自己的需求编制一个符合自己格式的函数

自定义函数一般都是把许多VB自带的函数编制一个符合自己需要的函数

例如制作一个辨别一个数是否为素数的函数

工具-添加过程-单选函数项

我输入的函数名为:ssif

格式为 只有一个参数为整型

是素数返回真 不是返回假

Public Function ssif(Nos As Integer) As Boolean

For i = 2 To Nos

If Nos Mod i = 0 Then

ssif = False

Exit For

End If

Next i

ssif = True

End Function

function conn() As adodbconnection

调用过程,调用过程有诸多技巧,它们与过程的类型、位置以及在应用程序中的使用方式有关。下面说明如何调用 Sub 过程和 Function 过程。

调用 Sub 过程

与 Sub 过程不同,在表达式中,Sub 过程不能用其名字调用。调用 Sub 过程的是一个独立的语句。Sub 过程还有一点与函数不一样,它不会用名字返回一个值。但是,与 Function过程一样,Sub 过程也可以修改传递给它们的任何变量的值。

调用 Sub 过程有两种方法:

'以下两个语句都调用了名为 MyProc 的 Sub 过程。

Call MyProc (FirstArgument, SecondArgument)

MyProc FirstArgument, SecondArgument

注意,当使用 Call 语法时,参数必须在括号内。若省略 Call 关键字,则也必须省略参数两边的括号

调用函数过程

通常,调用自行编写的函数过程的方法和调用 Visual Basic 内部函数过程(例如 Abs)的方法一样;即在表达式中写上它的名字。

'下面的语句都调用函数 ToDec。

Print 10 ToDec

X = ToDec

If ToDec = 10 Then DebugPrint "Out of Range"

X = AnotherFunction ( 10 ToDec)

就像调用 Sub 过程那样,也能调用函数。下面的语句都调用同一个函数:

Call Year (Now)

Year Now

当用这种方法调用函数时,Visual Basic 放弃返回值。

调用其它模块中的过程

在工程中的任何地方都能调用其它模块中的公用过程。可能需要指定这样的模块,它包含正在调用的过程。调用其它模块中的过程的各种技巧,取决于该过程是在窗体模块中、类模块中还是标准模块中。

窗体中的过程

所有窗体模块的外部调用必须指向包含此过程的窗体模块。如果在窗体模块 Form1 包含 SomeSub 过程,则可使用下面的语句调用 Form1 中的过程:

Call Form1SomeSub(arguments)

类模块中的过程

与窗体中调用过程类似,在类模块中调用过程要调用与过程一致并且指向类实例的变量。例如,DemoClass 是类 Class1 的实例:

Dim DemoClass as New Class1

DemoClassSomeSub

但是不同于窗体的是,在引用一个类的实例时,不能用类名作限定符。必须首先声明类的实例为对象变量(在这个例子中是 DemoClass )并用变量名引用它。

标准模块中的过程

如果过程名是唯一的,则不必在调用时加模块名。无论是在模块内,还是在模块外调用,结果总会引用这个唯一过程。如果过程仅出现在一个地方,这个过程就是唯一的。

如果两个以上的模块都包含同名的过程,那就有必要用模块名来限定了。在同一模块内调用一个公共过程就会运行该模块内的过程。例如,对于 Module1 和 Module2 中名为 CommonName 的过程,从 Module2 中调用 CommonName 则运行 Module2 中的 CommonName 过程,而不是 Module1 中的 CommonName 过程。

从其它模块调用公共过程名时必须指定那个模块。例如,若在 Module1 中调用 Module2 中的 CommonName 过程,要用下面的语句:

Module2CommonName (arguments)

Public   用于声明对所有模块中的所有其它过程都可以使用的过程。

Private  用于声明只能在包含该声明的模块中使用的过程。

分类: 电脑/网络

问题描述:

VB 例如一个用户函数f:

public function f(x as single) as single

a = f(a) <--是否能在这里调用f本身

end function

我记得好象不可以,会出错;但这个 *** 作好象是叫"迭代"吧(记不清了) 如果实现将很好用,该怎样实现呢

解析:

可以使用,您大约记错了。

public function f(x as single) as single

if a = 1 then

f = 2

else

f = 0

end if

a = f(a) <--这样a就得2了

end function

调用函数的格式为:

变量 = 函数()

你的例子应该是:

Dim d() as Byte

d=split(texttext," ") '注意双引号里一个空格

TextText = TextText & CRC16(d)

vb中没有这个函数,你可以自己写一个嘛。

public

function

max(a

as

single,

b

as

single)

as

single

if

a

>

b

then

max

=

a

else

max

=

b

end

function

这样你就可以使用它了,如

debugprint

max(125,16)

这时就会输出125与16中较大的一个数。

当然,你也可以把以上自定义函数中的两个变量,换成一个数组,这样就可以不只是在两个变量之间返回最大值,而是在一个数组中返回最大值。

如:

public

function

max(a()

as

single)

as

single

dim

i

as

integer,

p

as

single

p

=

a(1)

for

i

=

2

to

ubound(a)

if

p

<

a(i)

then

p

=

a(i)

next

i

max

=

p

end

function

这样你可以先定义一个数组,并把你要查找最大值的数据存入这个数组中,再调用这个函数查找。

如:

dim

dat()

as

single

dat(1)=

dat(2)=

debugprint

max(dat)

这样就可以输出一组数组中最大值。

不知楼主在C++区问VB是何意

函数和C++大体相同,如果是自己写的函数就先需要定义函数,VB函数分二种,一种是有返回值的(function),另一种是没有返回值的(sub),后者也被称为"过程"

public关键词定义了函数是全局可访问的,private定义了函数只能由函数所在模块使用即使在窗体模块中定义函数为public,那么在其他模块中也是不能访问的

VB函数定义和C++的区别一在于:VB靠public/private决定函数访问权限,而C++是如果函数原形不在调用源文件(cpp文件)中或被调用函数位置位于调用函数的后面,那么只需要在调用源文件中声明函数原型即可,或者将函数原型写到头文件中,然后在调用源文件中引用这个头文件即能对任意一个函数进行访问

区别二:C++的函数原型是指完整的函数定义,包含返回类型 函数名 ([参数列表]){ 语句1;语句2;;语句n[return 返回的值] },只要将返回类型声明成void时才不需要(也不能有return语句)C++的函数声明只需要写出与原形相同的结构,但不需要写实现具体形为的语句即{}内的内容不需要写

而VB中,一个模块中某个函数(或过程)调用另一个模块中的函数(或过程),那么被调用的函数声明时必须是public关键词定义的如果是同一模块中的函数,那么不管是public还是private定义的或者两者的上下位置,都可以访问,且不需要写函数声明

区别三,参数传递问题,VB是实参,即调用者传某个参数给被调用函数,那么被调用的函数有权修改传递的参数在C++中是形参,即调用者传某个参数给被调用者时,函数入堆,参数副本(即参数的copy)入栈,函数返回则函数出堆,栈中数据随函数出堆而出栈(虽然并没有被重置为0或空,但已经失去作用了)函数返回一个值(除非原型指定了void则没有返回值)栈中的数据不会影响到调用这个函数时传递的参数那么也就是说C++的函数只能有一个返回值不要失望,这是通常情况下,如果真的有需要调用函数后返回多个值是可以的,因为C++提供了指针和引用二种方式指针和引用解释起来就跑题了,呵呵,楼主如果是新手就去查查相关的资料,如果是老手,当我没说,囧简单点说指针和引用在函数参数上都是指向调用者所传递的参数的实体(不是副本)通过这二种方法,可以做到函数多值返回

C++搞这么麻烦是为什么答曰:数据保护机制可以最大程度上保护数据,防止随意修改参数后再将其返回,对此可能引起的代码错误是很难查出来的(只有不断的调试才会发现),也正是基于数据保护机制,通常C++的变量会要求尽可能的少使用全局变量

而VB根本没有这种保护机制

区别四:Windows API函数调用

VB中,需要在模块头部(即任何一个函数或过程前)声明被调用的API函数格式如下:

declare function(或sub) 函数名(或过程名) lib "库文件名(即DLL文件名)" alias 函数别名([参数名 as 参数类型],)as 函数返回值类型(sub无返回值)

过程如:

Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

函数如:

Declare Function CopyIcon Lib "user32" Alias "CopyIcon" (ByVal hIcon As Long) As Long

declare前指定为public时全局(工程中任意一个模块中)可访问,private则是当前模块可访问(窗体模块中不能定义为public)

C++调用windows api,都是引用头文件windowsh来一次性对所有可能用到的api函数和常数进行声明(= =还是头文件好啊)

VB调用API时默认是按地址传递,即byref 参数名 as 参数类型当我们想传递具体的值时将byref改为byval即可,意为按值传递所谓按地址即指,即调用者传递参数时传递的是这个参数在内存中的地址而按值传递则是读取这个参数的值再传递给被调用者

C++则全是按值传递(不使用指针和引用时都是形参,即是形参自然是取值了)

按地址传递还是按值传递按实际需要修改需要说明的是VB中按址传递时需要明确知道被调用函数是否支持按地传递,否则产生的错误可能使函数返回错误的值,也可能是致命错误而引起程序崩溃,系统死机等等(比如xxxexe遇到问题需要关闭,我们对此产生不便表示歉意囧)

区别五对于vb,过程(Sub)可以直接在单独的行上写上过程名即可,或者 call 过程名C++中,即使函数不接受参数,调用时也要加上(),在单独的行上写上函数名 后面跟一对()

想到的就这么多了不知是不是楼主想知道的

函数过程一般是有

返回值

的利用一个变量=过程名就可以完成调用了。例如:

declare

function

su(a

as

integer)

as

integer

su=a+100

end

function

'调用过程

dim

n

as

integer

n=su(100)

如果是函数的的话

就是用sub

定义的直接用

call语句

就行。如:

sub

su(

a

as

integer)

a=a+100

end

sub

'‘调用

dim

a

as

integer

call

su(a)

以上就是关于vb 自定义函数怎么定义和调用全部的内容,包括:vb 自定义函数怎么定义和调用、VB 模块中的过程如何调用、[VB]是否可以在函数中调用自己等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10169628.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存