About the Edit event listener Sample
[C#]
EventListener.cs
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geodatabase;
namespace Events
{
public class EventListener
{
#region "Members"
public event ChangedEventHandler Changed;
IEngineEditor m_editor;
//contains all edit events listed on IEngineEditEvents
public enum EditorEvent
{
OnAbort,
OnAfterDrawSketch,
OnBeforeStopEditing,
OnBeforeStopOperation,
OnChangeFeature,
OnConflictsDetected,
OnCreateFeature,
OnCurrentTaskChanged,
OnCurrentZChanged,
OnDeleteFeature,
OnSaveEdits,
OnSelectionChanged,
OnSketchFinished,
OnSketchModified,
OnStartEditing,
OnStartOperation,
OnStopEditing,
OnStopOperation,
OnTargetLayerChanged,
OnVertexAdded,
OnVertexMoved,
OnVertexDeleted
};
#endregion
#region "Constructor"
public EventListener(IEngineEditor editor)
{
if (editor == null)
{
throw new ArgumentNullException();
}
m_editor = editor;
}
#endregion
#region "Event Registration and Handling"
void OnEvent()
{
string eventName = GetEventName();
UpdateEventList(eventName);
}
void OnEvent<T>(T param)
{
string eventName = GetEventName();
UpdateEventList(eventName);
}
public void ListenToEvents(EditorEvent editEvent, bool start)
{
switch (editEvent)
{
case EditorEvent.OnAbort:
if (start)
((IEngineEditEvents_Event)m_editor).OnAbort += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnAbort -= OnEvent;
break;
case EditorEvent.OnAfterDrawSketch:
if (start)
((IEngineEditEvents_Event)m_editor).OnAfterDrawSketch += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnAfterDrawSketch -= OnEvent;
break;
case EditorEvent.OnBeforeStopEditing:
if (start)
((IEngineEditEvents_Event)m_editor).OnBeforeStopEditing += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnBeforeStopEditing -= OnEvent;
break;
case EditorEvent.OnBeforeStopOperation:
if (start)
((IEngineEditEvents_Event)m_editor).OnBeforeStopOperation += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnBeforeStopOperation -= OnEvent;
break;
case EditorEvent.OnChangeFeature:
if (start)
((IEngineEditEvents_Event)m_editor).OnChangeFeature += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnChangeFeature -= OnEvent;
break;
case EditorEvent.OnConflictsDetected:
if (start)
((IEngineEditEvents_Event)m_editor).OnConflictsDetected += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnConflictsDetected -= OnEvent;
break;
case EditorEvent.OnCreateFeature:
if (start)
((IEngineEditEvents_Event)m_editor).OnCreateFeature += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnCreateFeature -= OnEvent;
break;
case EditorEvent.OnCurrentTaskChanged:
if (start)
((IEngineEditEvents_Event)m_editor).OnCurrentTaskChanged += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnCurrentTaskChanged -= OnEvent;
break;
case EditorEvent.OnCurrentZChanged:
if (start)
((IEngineEditEvents_Event)m_editor).OnCurrentZChanged += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnCurrentZChanged -= OnEvent;
break;
case EditorEvent.OnDeleteFeature:
if (start)
((IEngineEditEvents_Event)m_editor).OnDeleteFeature += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnDeleteFeature -= OnEvent;
break;
case EditorEvent.OnSaveEdits:
if (start)
((IEngineEditEvents_Event)m_editor).OnSaveEdits += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnSaveEdits -= OnEvent;
break;
case EditorEvent.OnSelectionChanged:
if (start)
((IEngineEditEvents_Event)m_editor).OnSelectionChanged += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnSelectionChanged -= OnEvent;
break;
case EditorEvent.OnSketchFinished:
if (start)
((IEngineEditEvents_Event)m_editor).OnSketchFinished += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnSketchFinished -= OnEvent;
break;
case EditorEvent.OnSketchModified:
if (start)
((IEngineEditEvents_Event)m_editor).OnSketchModified += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnSketchModified -= OnEvent;
break;
case EditorEvent.OnStartEditing:
if (start)
((IEngineEditEvents_Event)m_editor).OnStartEditing += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnStartEditing -= OnEvent;
break;
case EditorEvent.OnStartOperation:
if (start)
((IEngineEditEvents_Event)m_editor).OnStartOperation += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnStartOperation -= OnEvent;
break;
case EditorEvent.OnStopEditing:
if (start)
((IEngineEditEvents_Event)m_editor).OnStopEditing += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnStopEditing -= OnEvent;
break;
case EditorEvent.OnStopOperation:
if (start)
((IEngineEditEvents_Event)m_editor).OnStopOperation += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnStopOperation -= OnEvent;
break;
case EditorEvent.OnTargetLayerChanged:
if (start)
((IEngineEditEvents_Event)m_editor).OnTargetLayerChanged += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnTargetLayerChanged -= OnEvent;
break;
case EditorEvent.OnVertexAdded:
if (start)
((IEngineEditEvents_Event)m_editor).OnVertexAdded += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnVertexAdded -= OnEvent;
break;
case EditorEvent.OnVertexMoved:
if (start)
((IEngineEditEvents_Event)m_editor).OnVertexMoved += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnVertexMoved -= OnEvent;
break;
case EditorEvent.OnVertexDeleted:
if (start)
((IEngineEditEvents_Event)m_editor).OnVertexDeleted += OnEvent;
else
((IEngineEditEvents_Event)m_editor).OnVertexDeleted -= OnEvent;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
string GetEventName()
{
//Get the name of the ArcEngine calling method and use this to indicate the event that was fired
StackTrace st = new System.Diagnostics.StackTrace();
StackFrame sf = st.GetFrame(2);
return (sf.GetMethod().Name);
}
void UpdateEventList(string eventName)
{
EditorEventArgs e = new EditorEventArgs(eventName);
if (Changed != null)
Changed(this, e);
}
#endregion
}
public class EditorEventArgs : EventArgs
{
public EditorEventArgs(string eventType)
{
this.eventType = eventType;
}
public string eventType;
}
public delegate void ChangedEventHandler(object sender, EditorEventArgs e);
}
[Visual Basic .NET]
EventListener.vb
Imports System
Imports System.Diagnostics
Imports System.Collections.Generic
Imports System.Text
Imports ESRI.ArcGIS.Controls
Imports ESRI.ArcGIS.Geodatabase
Namespace Events
Public Class EventListener
#Region "Members"
Public Event Changed As ChangedEventHandler
Dim m_editor As IEngineEditor
'contains all edit events listed on IEngineEditEvents
Public Enum EditorEvent
OnAbort
OnAfterDrawSketch
OnBeforeStopEditing
OnBeforeStopOperation
OnChangeFeature
OnConflictsDetected
OnCreateFeature
OnCurrentTaskChanged
OnCurrentZChanged
OnDeleteFeature
OnSaveEdits
OnSelectionChanged
OnSketchFinished
OnSketchModified
OnStartEditing
OnStartOperation
OnStopEditing
OnStopOperation
OnTargetLayerChanged
OnVertexAdded
OnVertexMoved
OnVertexDeleted
End Enum
#End Region
#Region "Constructor"
Public Sub New(ByVal editor As IEngineEditor)
If (editor Is Nothing) Then
Throw New ArgumentNullException
End If
m_editor = editor
End Sub
#End Region
#Region "Event Registration and Handling"
Sub OnEvent()
Dim eventName As String = GetEventName()
UpdateEventList(eventName)
End Sub
Sub OnEvent(Of T)(ByVal param As T)
Dim eventName As String = GetEventName()
UpdateEventList(eventName)
End Sub
Public Sub ListenToEvents(ByVal editEvent As EditorEvent, ByVal start As Boolean)
Select Case editEvent
Case EditorEvent.OnAbort
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnAbort, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnAbort, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnAfterDrawSketch
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnAfterDrawSketch, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnAfterDrawSketch, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnBeforeStopEditing
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnBeforeStopEditing, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnBeforeStopEditing, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnBeforeStopOperation
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnBeforeStopOperation, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnBeforeStopOperation, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnChangeFeature
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnChangeFeature, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnChangeFeature, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnConflictsDetected
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnConflictsDetected, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnConflictsDetected, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnCreateFeature
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnCreateFeature, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnCreateFeature, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnCurrentTaskChanged
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnCurrentTaskChanged, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnCurrentTaskChanged, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnCurrentZChanged
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnCurrentZChanged, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnCurrentZChanged, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnDeleteFeature
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnDeleteFeature, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnDeleteFeature, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnSaveEdits
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSaveEdits, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSaveEdits, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnSelectionChanged
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSelectionChanged, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSelectionChanged, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnSketchFinished
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSketchFinished, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSketchFinished, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnSketchModified
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSketchModified, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnSketchModified, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnStartEditing
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStartEditing, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStartEditing, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnStartOperation
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStartOperation, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStartOperation, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnStopEditing
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStopEditing, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStopEditing, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnStopOperation
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStopOperation, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnStopOperation, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnTargetLayerChanged
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnTargetLayerChanged, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnTargetLayerChanged, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnVertexAdded
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnVertexAdded, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnVertexAdded, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnVertexMoved
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnVertexMoved, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnVertexMoved, AddressOf OnEvent
End If
Exit Select
Case EditorEvent.OnVertexDeleted
If start Then
AddHandler DirectCast(m_editor, IEngineEditEvents_Event).OnVertexDeleted, AddressOf OnEvent
Else
RemoveHandler DirectCast(m_editor, IEngineEditEvents_Event).OnVertexDeleted, AddressOf OnEvent
End If
Exit Select
Case Else
Throw New ArgumentOutOfRangeException()
End Select
End Sub
Function GetEventName() As String
'Get the name of the ArcEngine calling method and use this to indicate the event that was fired
Dim st As StackTrace = New System.Diagnostics.StackTrace()
Dim sf As StackFrame = st.GetFrame(2)
GetEventName = sf.GetMethod().Name
End Function
Sub UpdateEventList(ByVal eventName As String)
Dim e As EditorEventArgs = New EditorEventArgs(eventName)
RaiseEvent Changed(Me, e)
End Sub
#End Region
End Class
Public Class EditorEventArgs
Inherits EventArgs
Public Sub New(ByVal eventType As String)
Me.eventType = eventType
End Sub
Public eventType As String
End Class
Public Delegate Sub ChangedEventHandler(ByVal sender As Object, ByVal e As EditorEventArgs)
End Namespace