| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6307 人关注过本帖, 1 人收藏
标题:vb实现回调函数
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏(1)
 问题点数:0 回复次数:9 
vb实现回调函数
程序代码:
'什么是回调函数?回调函数就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就
'是你的这个回调函数名。回调函数与普通的函数没有什么区别,其之所以称之为回调函数,是因为这个函数
'作为另外一个函数的参数,比如有以下两个函数 CallFun是回调函数, MainFun是调用回调函数的函数
'Private Sub CallFun(i as Integer)
'
'End Sub
'Private Sub MainFun(CallFun, i As Integer)
'    CallFun i
'End Sub
'不幸的是VB中不能将函数作为参数,利用上面的代码是不可行的。下面我将介绍可行的办法。
'首先让我们理解一下 Implements 语句
'语法 Implements [InterfaceName | Class]
'所需的 InterfaceName 或 Class 是类型库中的接口或类的名称,该类型库中的方法将用与 Visual Basic 类中相一致的方法来实现。
'说明:
'所谓接口就是代表接口封装的成员(方法以及属性)的原型集合;也就是说,它只包含成员过程的声明部分。一个类提供一个或多
'个接口的所有方法以及属性的一种实现方案。类的控制者每次调用函数时,该函数所执行的代码由类来提供。每个类至少应实现一
'个缺省接口。在 Visual Basic 中,一个已实现的接口中任何没有显式声明的成员都是缺省接口的隐式成员。
'当 Visual Basic 类实现接口时,都会提供该接口的类型库中说明的所有 Public 过程的版本。除了提供接口原型与自编过程之间的
'映射关系之外,Implements 语句还使这个类接收对指定接口 ID 的 COM QueryInterface 调用。
'看了说明是不是还是一头雾水,好的,下面让笔者用实际的例子演示一下相信各位看官就会明白的了。
'1.首先我们新建一个标准工程,然后在这个标准工作添加 类模块,然后把类模块的名字改为 InterFace ,意为 接口类, 根据接口定义
'我们在这个类模块中添加函数原形(所谓接口就是代表接口封装的成员(方法以及属性)的原型集合),即是说接口只是声明一了个原形,
'而不必有实现,可谓原形,比如一个函数原形如下:
'Private Sub CallFun(i as Integer)
'
'End Sub
'所谓实现如下:
'Private Sub CallFun(i as Integer)
'   msgbox i
'End Sub

'InterFace 类模块的代码如下:
'Public Sub CallFun(i as Integer)
'
'End Sub

'接着我们添加一个实现这个接口的类,首先添加一个类模块,把名字改为Func1
'添加以下代码:
'Implements InterFace
'这一句的意思即是说这个类是要实现InterFace接口的
'然后点击Implements InterFace上面的列表框,是不是看到了一个InterFace的项(如图1所示),我们选择这个项看看会有什么效果
'是不是自动添加了如下代码
'Private Sub InterFace_CallFun(i As Integer)
'
'End Sub
'然后我们可以在这个InterFace_CallFun函数中写我们想写的实现代码,我就写一句 msgbox i 代码吧,如下所示
'Implements InterFace
'Private Sub InterFace_CallFun(i As Integer)
'    MsgBox i
'End Sub

'然后我们在Form1的代码区中实现MainFun函数,如下
Private Sub MainFun(Fun As InterFace, i As Integer)
    Print "随便写的代码"
    Print "随便写的代码"
    Print "随便写的代码"
    Fun.CallFun i
   Print "随便写的代码"
End Sub
'接着在Form1的Click事件中调用MainFun函数,如下代码所示

Private Sub Form_Click()
    MainFun New Func1, 10
    '好的,如果我们想把i的值等于99时再Msgbox出来如何是好呢?是不是得回去修改Func1类的,这当然不,而是继续添加另外一个类
    '模块,把名字改为Func2, 添加以下代码
    'Implements InterFace
    'Private Sub InterFace_CallFun(i As Integer)
    '    If i = 99 Then
    '        MsgBox i
    '    End If
    'End Sub
    '好的,我们现在调用一下看看
    MainFun New Func2, 88  '这句没有满足条件没有显示结果
    MainFun New Func2, 99  '这句满足了条件从而显示了结果
End Sub

'本教程是一个简单的例程,如果各位看官有不明白之处请提问,本文有谬误之处亦请指出,谢谢!
图1:
图片附件: 游客没有浏览图片的权限,请 登录注册

工程演示源码:
CallBack.rar (15.44 KB)

搜索更多相关主题的帖子: 回调 函数 
2010-06-01 08:45
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
没人顶啊。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-06-01 12:26
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
2010-06-01 12:41
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
乍弄得这么复杂.用ActiveX EXE不更好。我仔细看看。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-06-01 13:02
纪永君
Rank: 2
来 自:山东蓬莱,蓬莱祥林
等 级:论坛游民
威 望:1
帖 子:68
专家分:37
注 册:2008-6-27
收藏
得分:0 
我倒是经常使用子函数来计算,句式是:
gosub aaaa



aaaa:
函数过程:return
2010-06-01 21:31
mx250052
Rank: 2
等 级:论坛游民
帖 子:61
专家分:25
注 册:2009-3-1
收藏
得分:0 
我都不会用子函数,大家加油!我是初学者!
2010-06-02 21:38
ycyhjj2865
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-12-15
收藏
得分:0 
首先不好意思,今天偶尔看到贵贴,给楼主提出不同看法。

楼主举的例子,似乎有些让人误解,把你的这个关键调用方式我再概括的展示一下:
Public Function  CallBack(ClassName as class ,Ax as long) as long

注意:你的第一个参数是一个实现了接口的变量,也就是实现抽象类的变量,第二个参数是一个指定基本类型的变量。
      那么你的第一个参数可以肯定说,不是一个函数指针。
      因此你的这段代码也称不上是一个回调函数的实现。

但有一点可以确定,你的思路是正确的,可以将函数封装到一个指定类中,从而实现你所说的回调结果。
不过,如果我直接声明这个类,并且直接调用这个类的方法(就是上面所说的函数),是不是更加简洁呢?
当然楼主可以过使用接口,模拟实现多态的函数的调用,但是与回调函数的话题就不相关了,
2011-10-21 16:45
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 7楼 ycyhjj2865
这么久的帖子都还有人回,呵呵。。。
阁下言之有理啊,多多交流。

/images/2011/147787/2011051411021524.jpg" border="0" />
2012-04-13 16:01
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 7楼 ycyhjj2865
不过,如果直接指定为类声明的话就实现不了回调,因为回调函数是用户写的。用接口的方式就可以规范出一个规则让用户去写回调函数。

/images/2011/147787/2011051411021524.jpg" border="0" />
2012-04-13 16:04
Cvdong
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-4-15
收藏
得分:0 
回复 7楼 ycyhjj2865
正解!!!
2016-07-29 16:27
快速回复:vb实现回调函数
数据加载中...
 
   



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

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