收录日期:2019/10/21 08:24:22 时间:2016/08/28 11:56:06 标签:VB.NET
有一个类Class1,里面有个事件aa
Public Class Class1

    Public Event aa(ByVal str As String)
    Public Sub CallAA()
        RaiseEvent aa("aaa")
    End Sub
End Class


在一个模块里定义一个公用的Class1类对象:
Public WithEvents bb As New Class1


在一个窗体(Form1)里触发这个事件:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        bb.CallAA()
    End Sub

  Private Sub Get_aa() Handles bb.aa  ‘报错的地方 
    msgbox "aa事件被触发"
  End Sub

错误提示:“Handles 子句要求一个在包含类型或它的某个基类型中定义的 WithEvents 变量”

但是把bb定义在Form1窗体内的话,就没有问题?
难道要使用事件的Handles这样方式,必须把对象定义在相应的窗体内?不能把bb定义为全局变量吗?
(当然这样是可以的:AddHandler  bb.aa, AddressOf Get_aa),问题是我想使用这种方式:
Private Sub Get_aa() Handles bb.aa
end sub
你事件原型定义时定义了参数
Public Event aa(ByVal str As String)

所以在定义事件时,也要参数
 Private Sub Get_aa(参数) Handles bb.aa  ‘报错的地方 
引用 1 楼 gxingmin 的回复:
你事件原型定义时定义了参数
Public Event aa(ByVal str As String)

所以在定义事件时,也要参数
 Private Sub Get_aa(参数) Handles bb.aa  ‘报错的地方


一开始是没有参数的,后来又加了参数,复制代码时弄混了,就算加上参数也是不行的,
Public WithEvents bb As New Class1 
好像只能定义在和他委托函数在同一个地方,如果都放在窗体内,或都放在模块内就没有问题,比如把
Public WithEvents bb As New Class1 


Private Sub Get_aa(ByVal str As String) Handles bb.aa end sub 

都放在模块内,没有问题,如果定义放在模块内,函数放在窗体内就不行

该回复于2013-04-03 17:06:39被管理员删除

程序获取wince系统密码 GridView的OnItemClickListener不响应问题 一些我不理解的“与”运算,困惑。 请问2005里面有日志文件查看器,一个警告信息“尚未定义空闲CPU条件-ONIDLE..\" 求助高手检查错误 怎么样增加触发事件啊,下面这些代码行吗? 有谁知道CryptExportKey的key的格式, 如何与标准的PKCS#1对接? VFP获取串口数据乱码问题????? flex+java上传的问题 如果回到60年前,你愿意做什么? 求购这本书 xp 同时存在sql2000和sql2005时用VS2008连接的问题 只是想看看结帖率, 分全给sf 寻求 图像合成项目合作伙伴 Oracle和MySQL 启动的奇怪问题 装个控制网速的系统哪里有啊,怎么装啊 测试一个帖子 请教高手 分页出错,RowCommand事件代码有问题!! ActiveXObject(\"Scripting.FileSystemObject\") 问题 为什么这个excel文件要保存后,设置的函数才起作用? 添加删除程序是怎么实现的? 安装asm的问题 弱弱的问句:里的$符号啥意思? SQL ASP 【要下班咯。】 如何知道linux进程已经占用了那些信号量? 存储过程序读取url 解析值的问题请教 一个算法问题 接收到的存储过程返回值被截断了,怎么回事?