Handling events in VB.NET
By Adam Nagy
I found a C# sample project called EventsWatcher, but I'm not sure how to do similar event handling in VB.NET
Solution
In VB.NET you can handle events in two ways:
1) The VB6 way:
1.declare a variable with WithEvents keyword
2.set it to the object which provides the events
3.select the variable in the combo box on the left side (A) above the coding area, then select the event you want to handle in the combo box on the right side (B)
2) The .NET way / handling a specific event
1.define a function you want to handle the event with, e.g. OnDocumentDestroyed
2.create a delegate for the function, e.g. New DocumentDestroyedEventHandler(AddressOf OnDocumentDestroyed)
3.use AddHandler to add the delegate as one of the handlers of the specific event
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.ApplicationServices
Public Class MyClass1
' VB style
Private Shared WithEvents docEvents As DocumentCollection
Private Shared Sub docEvents_DocumentCreated(ByVal sender As Object, ByVal e As DocumentCollectionEventArgs) _
Handles docEvents.DocumentCreated
MsgBox(e.Document.Name & " opened")
End Sub
' .NET style
Private Shared docDestroyedEvent As DocumentDestroyedEventHandler
Public Shared Sub OnDocumentDestroyed(ByVal sender As Object, ByVal e As DocumentDestroyedEventArgs)
MsgBox(e.FileName & " closed")
End Sub
<CommandMethod("StartEventHandling")> _
Public Sub Asdkcmd1()
' Start VB Style handling – all docEvents related event
' handling is started
dcEvents = Application.DocumentManager
' Start .NET style handling – only this specific event
' handling is started
Dim docs As DocumentCollection = Application.DocumentManager
If docDestroyedEvent Is Nothing Then
docDestroyedEvent =
New DocumentDestroyedEventHandler(
AddressOf OnDocumentDestroyed)
AddHandler docs.DocumentDestroyed, docDestroyedEvent
End If
End Sub
<CommandMethod("StopEventHandling")> _
Public Sub Asdkcmd2()
' Stop VB style handling – all docEvents related event handling
' is stopped
docEvents = Nothing
' Stop .NET style handling – only this specific event handling
' is stopped
Dim docs As DocumentCollection = Application.DocumentManager
If Not docDestroyedEvent is Nothing Then
emoveHandler docs.DocumentDestroyed, docDestroyedEvent
docDestroyedEvent = Nothing
End If
End Sub
End Class
In VB.NET “Shared” is the C#/C++ equivalent of “static”, which means that the same instance of the variable will be available for all instances of the container class.
You find this being used in the EventsWatcher sample as well. It’s needed, because otherwise a new instance of MyClass1 would be created for each document.
So without this “Shared” keyword, each document in which you called “StartEventHandling” would start running its own event handler.
[本日志由 tiancao1001 于 2014-01-18 11:08 PM 编辑]
|
暂时没有评论
发表评论 - 不要忘了输入验证码哦! |