收录日期:2019/07/17 12:58:49 时间: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被管理员删除

属性文件读取的问题 关于GridView,求助,在线 生成.net项目的时候,报错了! 有谁能帮我组装一台RAID1的服务器,谢谢啦! socket 异步通信 存储过程哪里有错 Activity恢复之前的状态? 新出炉的菜鸟大送分啦,大家过来看啊,先到先得啊^_^ 如何实现两个项目之间的跳转 语句查询 【7月13日】一个特别的日子,散分!!! 推荐基本适合新手学习的WCF书籍 activitygroup 焦点问题 Girdview 双击某一行怎么获取该行的Id 问个初级问题,vs2010的全称是什么? ****某某某专场!!!!灌水的就算了!!!!! 【北京群】今儿第一个沙发 .。 参加10月的在职硕士研究生入学考试,毕业后只能获取硕士学位,而没有硕士学历,这样毕业后有用吗? 请各位前辈指教 咱也来个专场 delphi 发送短信问题,........... 窗口客户区的CRect始终拿不对,不知道为啥 CStatic 右键菜单 【北京群】今儿第二个沙发 .。 如何动态加载如下的列表 求个vc++6.0,郁闷死了 【北京群】今儿第三个沙发 .。 谁知道深圳哪里有艾罗补脑汁啊! 关于使用动态连接库程序中所涉及到的指针 *(void **)(&pFunc) 可不可以再开个区