I have been struggling with getting two types of addins to work together for some time now. I have created an editor extension addin and have been able to listen to events on start editing with success. I also have created a regular (desktop) extension and can check it on and off with success. What I am having trouble with is that I would like the editor event listener to only work when the extension in ArcMap is enabled (checked). I am working with the desktop extension addin now but whenever I add the event handlers to start listening when the extension is enabled it causes ArcMap to crash. Any ideas or sample code would be greatly appreciated! The handlers are commented out since that is what is causing ArcMap to crash.
Imports ESRI.ArcGIS.Editor
Public Class MyEditListener
Inherits ESRI.ArcGIS.Desktop.AddIns.Extension
Public Sub New()
End Sub
Protected Overrides Sub OnStartup()
' TODO: Uncomment to start listening to document events
'WireDocumentEvents()
End Sub
Private m_editorEvent As IEditEvents_Event
Protected Overrides Function OnSetState(ByVal state As ESRI.ArcGIS.Desktop.AddIns.ExtensionState) As Boolean
Me.State = state
If state = ESRI.ArcGIS.Desktop.AddIns.ExtensionState.Enabled Then
MsgBox("Enabled")
'AddHandler m_editorEvent.OnStartEditing, AddressOf Events_OnStartEditing
'AddHandler m_editorEvent.OnStopEditing, AddressOf Events_OnStopEditing
Else
MsgBox("Not Enabled")
End If
Return MyBase.OnSetState(state)
End Function
Private Sub Events_OnStartEditing()
MsgBox("start editing")
End Sub
Private Sub Events_OnStopEditing()
MsgBox("stop editing")
End Sub
Solved! Go to Solution.
Stacy,
You have defined m_editorEvent, but not set it anywhere. You'll need to cast it from the editor.
Stacy,
You have defined m_editorEvent, but not set it anywhere. You'll need to cast it from the editor.
Here's how I do that. In the different editor events I have assigned, the first line in the function is
If Not (myAddin.Extension.IsExtensionEnabled) Then Exit Sub
The Extension class in my add-in contains these functions
Private Shared s_Extension As myAddin.Extension Friend Shared Function IsExtensionEnabled() As Boolean If s_Extension Is Nothing Then GetExtension() End If If s_Extension Is Nothing Then Return False End If Return s_Extension.State = ESRI.ArcGIS.Desktop.AddIns.ExtensionState.Enabled End Function Private Shared Function GetExtension() As myAddin.Extension If s_Extension Is Nothing Then Dim extID As New ESRI.ArcGIS.esriSystem.UID extID.Value = My.ThisAddIn.IDs.Extension My.ArcMap.Application.FindExtensionByCLSID(extID) End If Return s_Extension End Function
Thank you for your answers! Both have helped me solve different problems I had with my script.