
先来看看在VB中如何使用类的事件。特别指出,这里的事件不是Windows的消息事件,而是类的自定义事件。
'在类中声明一个事件
Public Event MyEvent()
'触发一个事件
RaiseEvent MyEvent
在创建对象后如何调用这个事件呢?如下:
'声明一个事件类的对象,注意WithEvents关键字
Public WithEvents theClass As MyClass
'创建对象,不能和声明放在一条语句
Set theClass = New MyClass
'调用事件
Private Sub theClass_MyEvent()
'添加事件处理代码
End Sub
在VB中提供了类的事件机制,它在对象内部的数据改变时,可以通知用户在外部进行处理,提高了与用户的交互能力。
接下来我们看看在C++中如何实现类似的事件功能。先看类的代码:
class MyClass{
typedef void (*pFunc)(void)
public:
void MyEvent(pFunc pEventFunc)
{
m_pMyEvent=pEventFunc
}
void Run()
{
try
{
m_pMyEvent()
}
catch(...){}
}
private:
pFunc m_pMyEvent // 保存事件函数的指针
}
接着看调用对象的代码,如下:
//事件函数
void EventFunc(void){
cout<<"raise event. "<<endl
}
int main()
{
MyClass theClass
theClass.MyEvent(EventFunc)
theClass.Run()
return 0
}
由上面代码可知,在C++中,其实就是使用回调函数来模拟类似于VB的类的事件机制。首先将一个函数的指针保存的类的私有变量中,当需要触发事件时,则通过先前保存的函数指针来调用函数即可。
举个简单的流程1.先定义一个委托,不过很多时候不需要,可以直接使用系统的。
public delegate void SampleEventHandler(object sender, SampleEventArgs e)
2.在类中定义事件。
public event SampleEventHandler SampleEvent
要了解深刻一点,你可以查看一下多播委托(Multicast Delegate)
3.执行事件:
private OnSampleEventHandler(object sender, SampleEventArgs e) {
if (SampleEvent != null) {
SampleEvent(sender, e)
}
}
外部:
4.加载事件:
xxx.SampleEvent += this.xxx_OnSampleEventHandler
5.定义事件发生时执行的方法
protected void xxx_OnSampleEventHandler(object sender, SampleEventArgs e) { ... }
在类视图中选择要添加消息相应函数的类,右击->属性,消息选项卡选择要添加的函数。把输入光标定在一个类的类名上,然后 “Ctrl+Enter”,调出属性面板,在面板上就可以看到有消息映射的按钮了。
切换过去只后,就可以看到所有能自动添加消息映射的消息了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)