VB.NET 中多个类共用一个事件通道
项目中要将C#代码(
多个类共用一个事件通道)转换成VB.NET,觉得有一定的技术含量,以供参考.
C#代码示例如下:
public
delegate
void
showMsgEventHandler(
string
msg);
class msg { publiceventshowMsgEventHandlershowMsgEvent; publicstringexecMsg(stringmsg) { if(showMsgEvent!=null) { showMsgEvent(msg+","+DateTime.Now.ToString()); } returnstring.Empty; } } === 调用 === int i = 3 ; msg[]myMsg; private void button2_Click( object sender,EventArgse) { myMsg=newmsg[i]; for(intj=0;j<i;j++) { myMsg[j]=newmsg(); myMsg[j].showMsgEvent+=newshowMsgEventHandler(Form3_showMsgEvent); } } void Form3_showMsgEvent( string msg) { MessageBox.Show(msg); } private void button3_Click( object sender,EventArgse) { for(intj=0;j<i;j++) { myMsg[j].execMsg("good"+j.ToString()); } } 转换后的VB.NET代码:
Delegate
SubshowMsgEventHandler()
SubshowMsgEventHandler(ByValmsgAsString)
ClassmsgClassmsg PublicnameAsString EventmsgEventAsshowMsgEventHandler PublicSubshowMsg()SubshowMsg(ByValmsgAsString) MsgBox(msg+DateTime.Now.ToString()+","+name) EndSub EndClass
===
调用
===
Dim i As Integer = 0 Dim myContain As New List(Ofmsg) Private SubButton2_Click() SubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click Fori=0To3Step1 DimmyMsgAsNewmsg myMsg.name="name"&i.ToString() myContain.Add(myMsg) AddHandlermyMsg.msgEvent,NewshowMsgEventHandler(AddressOfresponseMsg) Nexti EndSub Private SubresponseMsg() SubresponseMsg(ByValmsgAsString) MsgBox(msg) EndSub Private SubForm1_Load() SubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load EndSub Private SubButton3_Click() SubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click Fori=0To3Step1 DimmyMsgAsNewmsg myMsg=myContain.Item(i) myMsg.showMsg("good") Nexti EndSub 附录:
构造事件处理程序的方法取决于它与事件的关联方式。创建事件处理程序的标准方式是将 Handles 关键字与 WithEvents 关键字一起使用。Visual Basic 提供了第二种方式来处理事件:即 AddHandler 语句。AddHandler 和 RemoveHandler 允许您动态地启动和停止特定事件的事件处理。两种途径都可以使用,但不应该在同一个事件中同时使用 WithEvents 和 AddHandler。 用 WithEvents 处理事件WithEvents 关键字允许创建可在事件处理程序中与 Handles 子句一同使用的类级或模块级对象变量。 用 WithEvents 和 Handles 子句处理对象
用 AddHandler 处理事件可以用 AddHandler 语句动态地将事件与事件处理程序过程连接。 用 AddHandler 处理事件
使用 RemoveHandler 停止处理事件可以使用 RemoveHandler 语句动态地断开事件与事件处理程序过程之间的连接。 使用 RemoveHandler 停止处理事件
处理自基类继承的事件派生类(继承某个基类特征的类)能用 HandlesMyBase 语句处理它们的基类所引发的事件。 处理来自基类的事件
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |