ArcObjects Library Reference  

EditingForm

About the Edit event listener Sample

[C#]

EditingForm.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;

using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Geodatabase;
namespace EditingSampleApp
{
    public partial class EditingForm : Form
    {

        #region class private members
        private IToolbarMenu m_toolbarMenu;       

        #endregion
        internal TabPage m_selectTab;
        internal TabPage m_listenTab;
        Events.EventListener eventListener;
        IEngineEditor m_editor;
        
        public EditingForm()
        {
            InitializeComponent();
        }

        private void EngineEditingForm_Load(object sender, EventArgs e)
        {
            m_editor = new EngineEditorClass();
           
            //Set buddy controls
            axTOCControl1.SetBuddyControl(axMapControl1);
            axEditorToolbar.SetBuddyControl(axMapControl1);
            axToolbarControl1.SetBuddyControl(axMapControl1);

            //Add items to the ToolbarControl
            axToolbarControl1.AddItem("esriControls.ControlsOpenDocCommand", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsSaveAsDocCommand", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsAddDataCommand", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);            
            axToolbarControl1.AddItem("esriControls.ControlsMapZoomInTool", 0, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsMapPanTool", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsMapFullExtentCommand", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentBackCommand", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentForwardCommand", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
           
            //Add items to the custom editor toolbar          
            axEditorToolbar.AddItem("esriControls.ControlsEditingEditorMenu", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axEditorToolbar.AddItem("esriControls.ControlsEditingEditTool", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axEditorToolbar.AddItem("esriControls.ControlsEditingSketchTool", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axEditorToolbar.AddItem("esriControls.ControlsUndoCommand", 0, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axEditorToolbar.AddItem("esriControls.ControlsRedoCommand", 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axEditorToolbar.AddItem("esriControls.ControlsEditingTargetToolControl", 0, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
            axEditorToolbar.AddItem("esriControls.ControlsEditingTaskToolControl", 0, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
                       
            //Create a popup menu
            m_toolbarMenu = new ToolbarMenuClass();
            m_toolbarMenu.AddItem("esriControls.ControlsEditingSketchContextMenu", 0, 0, false, esriCommandStyles.esriCommandStyleTextOnly);

            //share the command pool          
            axToolbarControl1.CommandPool = axEditorToolbar.CommandPool;
            m_toolbarMenu.CommandPool = axEditorToolbar.CommandPool;

            //Create an operation stack for the undo and redo commands to use
            IOperationStack operationStack = new ControlsOperationStackClass();
            axEditorToolbar.OperationStack = operationStack;

            // Fill the Check List of Events for Selection
            TabControl tabControl = eventTabControl as TabControl;
            System.Collections.IEnumerator enumTabs = tabControl.TabPages.GetEnumerator();
            enumTabs.MoveNext();
            m_listenTab = enumTabs.Current as TabPage;
            enumTabs.MoveNext();
            m_selectTab = enumTabs.Current as TabPage;

            CheckedListBox editEventList = m_selectTab.GetNextControl(m_selectTab, true) as CheckedListBox;
            editEventList.ItemCheck += new ItemCheckEventHandler(editEventList_ItemCheck);

            ListBox listEvent = m_listenTab.GetNextControl(m_listenTab, true) as ListBox;
            listEvent.MouseDown += new MouseEventHandler(listEvent_MouseDown);

            eventListener = new Events.EventListener(m_editor);

            eventListener.Changed += new Events.ChangedEventHandler(eventListener_Changed);

            //populate the editor events            
            editEventList.Items.AddRange(Enum.GetNames(typeof(Events.EventListener.EditorEvent)));

            //add some sample line data to the map
            IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass();
            //relative file path to the sample data from EXE location
            string filePath = @"..\..\..\data\StreamflowDateTime\Streamflow.mdb";
            
            IFeatureWorkspace workspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(filePath, axMapControl1.hWnd);

            //Add the various layers
            IFeatureLayer featureLayer1 = new FeatureLayerClass();
            featureLayer1.Name = "Watershed";
            featureLayer1.Visible = true;
            featureLayer1.FeatureClass = workspace.OpenFeatureClass("Watershed");
            axMapControl1.Map.AddLayer((ILayer)featureLayer1);

            IFeatureLayer featureLayer2 = new FeatureLayerClass();
            featureLayer2.Name = "TimSerTool";
            featureLayer2.Visible = true;
            featureLayer2.FeatureClass = workspace.OpenFeatureClass("TimSerTool");
            axMapControl1.Map.AddLayer((ILayer)featureLayer2);

        }


        private void axMapControl1_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e)
        {
            if (e.button == 2) m_toolbarMenu.PopupMenu(e.x, e.y, axMapControl1.hWnd);

        }

        void editEventList_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e)
        {
          // start or stop listening for event based on checked state
          eventListener.ListenToEvents((Events.EventListener.EditorEvent)e.Index, e.NewValue == CheckState.Checked);
        }
        void eventListener_Changed(object sender, Events.EditorEventArgs e)
        {
          ((ListBox)m_listenTab.GetNextControl(m_listenTab, true)).Items.Add(e.eventType.ToString());
        }
        void listEvent_MouseDown(object sender, MouseEventArgs e)
        {
          if (e.Button == MouseButtons.Right)
          {
            this.lstEditorEvents.Items.Clear();
            this.lstEditorEvents.Refresh();
          }
        }

      private void chkAllOn_Click(object sender, EventArgs e)
      {
        CheckedListBox editEventList = m_selectTab.GetNextControl(m_selectTab, true) as CheckedListBox;
        for (int i = 0; i < editEventList.Items.Count; i++ )
        {
          editEventList.SetItemChecked(i, true);
        }      
      }

      private void chkAllOff_Click(object sender, EventArgs e)
      {
        CheckedListBox editEventList = m_selectTab.GetNextControl(m_selectTab, true) as CheckedListBox;
        for (int i = 0; i < editEventList.Items.Count; i++)
        {
          editEventList.SetItemChecked(i, false);
        }      
      }

      private void clearEventList_Click(object sender, EventArgs e)
      {
        this.lstEditorEvents.Items.Clear();
        this.lstEditorEvents.Refresh();
      }
    }
}
[Visual Basic .NET]

EditingForm.vb

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.IO

Imports ESRI.ArcGIS.Controls
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Display
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.SystemUI
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.DataSourcesFile
Imports ESRI.ArcGIS.DataSourcesGDB

Imports Application.Events

Public Class EditingForm


  Private m_toolbarMenu As IToolbarMenu
  Private m_editor As IEngineEditor
  Friend m_selectTab As TabPage
  Friend m_listenTab As TabPage
    Private eventListener As EventListener



  Private Sub EditingForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    m_editor = New EngineEditorClass()

    'set buddy controls
    AxTOCControl1.SetBuddyControl(AxMapControl1)
    AxEditorToolbar.SetBuddyControl(AxMapControl1)
    AxToolbarControl1.SetBuddyControl(AxMapControl1)

    'Add items to the ToolbarControl
    AxToolbarControl1.AddItem("esriControls.ControlsOpenDocCommand", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsSaveAsDocCommand", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsAddDataCommand", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsMapZoomInTool", 0, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsMapPanTool", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsMapFullExtentCommand", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentBackCommand", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentForwardCommand", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)

    'Add items to the custom editor toolbar          
    AxEditorToolbar.AddItem("esriControls.ControlsEditingEditorMenu", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxEditorToolbar.AddItem("esriControls.ControlsEditingEditTool", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxEditorToolbar.AddItem("esriControls.ControlsEditingSketchTool", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxEditorToolbar.AddItem("esriControls.ControlsUndoCommand", 0, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxEditorToolbar.AddItem("esriControls.ControlsRedoCommand", 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxEditorToolbar.AddItem("esriControls.ControlsEditingTaskToolControl", 0, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly)
    AxEditorToolbar.AddItem("esriControls.ControlsEditingTargetToolControl", 0, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly)

    'Create a popup menu
    m_toolbarMenu = New ToolbarMenuClass()
    m_toolbarMenu.AddItem("esriControls.ControlsEditingSketchContextMenu", 0, 0, False, esriCommandStyles.esriCommandStyleTextOnly)

    'share the command pool
    AxToolbarControl1.CommandPool = AxEditorToolbar.CommandPool
    m_toolbarMenu.CommandPool = AxEditorToolbar.CommandPool

    'Create an operation stack for the undo and redo commands to use
    Dim operationStack As IOperationStack = New ControlsOperationStackClass()
    AxEditorToolbar.OperationStack = operationStack

    ' Fill the Check List of Events for Selection 
    Dim tabControl As TabControl = TryCast(eventTabControl, TabControl)
    Dim enumTabs As System.Collections.IEnumerator = tabControl.TabPages.GetEnumerator()
    enumTabs.MoveNext()
    m_listenTab = TryCast(enumTabs.Current, TabPage)
    enumTabs.MoveNext()
    m_selectTab = TryCast(enumTabs.Current, TabPage)

    Dim editEventList As CheckedListBox = TryCast(m_selectTab.GetNextControl(m_selectTab, True), CheckedListBox)
    AddHandler editEventList.ItemCheck, AddressOf editEventList_ItemCheck

    Dim listEvent As ListBox = TryCast(m_listenTab.GetNextControl(m_listenTab, True), ListBox)
    AddHandler listEvent.MouseDown, AddressOf listEvent_MouseDown

    eventListener = New EventListener(m_editor)

    AddHandler eventListener.Changed, AddressOf eventListener_Changed

    'populate the editor events 
    editEventList.Items.AddRange([Enum].GetNames(GetType(EventListener.EditorEvent)))


    'add some sample line data to the map
    Dim workspaceFactory As IWorkspaceFactory = New AccessWorkspaceFactoryClass()
    'relative file path to the sample data from EXE location
        Dim filePath As String = "..\..\..\data\StreamflowDateTime\Streamflow.mdb"
    
    Dim workspace As IFeatureWorkspace = CType(workspaceFactory.OpenFromFile(filePath, AxMapControl1.hWnd), IFeatureWorkspace)

    'Add the various layers 
    Dim featureLayer1 As IFeatureLayer = New FeatureLayerClass()
    featureLayer1.Name = "Watershed"
    featureLayer1.Visible = True
    featureLayer1.FeatureClass = workspace.OpenFeatureClass("Watershed")
    AxMapControl1.Map.AddLayer(DirectCast(featureLayer1, ILayer))

    Dim featureLayer2 As IFeatureLayer = New FeatureLayerClass()
    featureLayer2.Name = "TimSerTool"
    featureLayer2.Visible = True
    featureLayer2.FeatureClass = workspace.OpenFeatureClass("TimSerTool")
    AxMapControl1.Map.AddLayer(DirectCast(featureLayer2, ILayer))

  End Sub

    Private Sub AxMapControl1_OnMouseDown(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent) Handles AxMapControl1.OnMouseDown
        'popup the menu
        If e.button = 2 Then m_toolbarMenu.PopupMenu(e.x, e.y, AxMapControl1.hWnd)
    End Sub

  Private Sub editEventList_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs)
    ' start or stop listening for event based on checked state 
    eventListener.ListenToEvents(DirectCast(e.Index, EventListener.EditorEvent), e.NewValue = CheckState.Checked)
  End Sub
  Private Sub eventListener_Changed(ByVal sender As Object, ByVal e As EditorEventArgs)
    DirectCast(m_listenTab.GetNextControl(m_listenTab, True), ListBox).Items.Add(e.eventType.ToString())
  End Sub
  Private Sub listEvent_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
    If e.Button = Windows.Forms.MouseButtons.Right Then
      Me.lstEditorEvents.Items.Clear()
      Me.lstEditorEvents.Refresh()
    End If
  End Sub

  Private Sub clearEvents_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearEvents.Click
    Me.lstEditorEvents.Items.Clear()
    Me.lstEditorEvents.Refresh()
  End Sub

  Private Sub selectAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles selectAll.Click
    Dim editEventList As CheckedListBox
    editEventList = m_selectTab.GetNextControl(m_selectTab, True)
    Dim i As Integer
    For i = 0 To editEventList.Items.Count - 1 Step i + 1
      editEventList.SetItemChecked(i, True)
    Next
  End Sub

  Private Sub deselectAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles deselectAll.Click
    Dim editEventList As CheckedListBox
    editEventList = m_selectTab.GetNextControl(m_selectTab, True)
    Dim i As Integer
    For i = 0 To editEventList.Items.Count - 1 Step i + 1
      editEventList.SetItemChecked(i, False)
    Next
  End Sub
End Class