MainForm.vb
' Copyright 2012 ESRI ' ' All rights reserved under the copyright laws of the United States ' and applicable international laws, treaties, and conventions. ' ' You may freely redistribute and use this sample code, with or ' without modification, provided you include the original copyright ' notice and use restrictions. ' ' See the use restrictions. ' Imports System.IO Imports ESRI.ArcGIS.esriSystem Imports ESRI.ArcGIS.Carto Imports ESRI.ArcGIS.Controls Imports ESRI.ArcGIS.ADF Imports ESRI.ArcGIS.SystemUI Imports ESRI.ArcGIS.SchematicControls Imports ESRI.ArcGIS.Schematic Public Class MainForm Private m_mapControl As IMapControl3 = Nothing Private m_mapDocumentName As String = String.Empty Private m_menuLayer As IToolbarMenu Private m_menuSchematicLayer As IToolbarMenu Private m_createMenu As IToolbarMenu = New ToolbarMenuClass Private m_pTocControl As ITOCControl2 Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.Load 'get the MapControl m_mapControl = CType(axMapControl1.Object, IMapControl3) m_pTocControl = CType(axTOCControl1.Object, ITOCControl2) 'disable the Save menu (since there is no document yet) menuSaveDoc.Enabled = False Dim menuDefSchematicEditor As IMenuDef 'Create a SchematicEditor's MenuDef object menuDefSchematicEditor = New CreateMenuSchematicEditor 'Add SchematicEditor on the ToolBarMenu m_createMenu.AddItem(menuDefSchematicEditor, 0, -1, False, esriCommandStyles.esriCommandStyleIconAndText) 'Set the Toolbar menu's hook m_createMenu.SetHook(axToolbarControl2.Object) 'Set the ToolbarMenu's caption m_createMenu.Caption = "SchematicEditor" 'Add ToolbarMenu on the ToolBarControl axToolbarControl2.AddItem(m_createMenu, -1, -1, False, 0, esriCommandStyles.esriCommandStyleMenuBar) 'Create a other ToolbarMenu for layer m_menuSchematicLayer = New ToolbarMenuClass() m_menuLayer = New ToolbarMenuClass() 'Add 2 ControlsSchematic items on the Layer properties menu m_menuSchematicLayer.AddItem(New RemoveLayer, -1, 0, False, esriCommandStyles.esriCommandStyleTextOnly) m_menuSchematicLayer.AddItem("esriControls.ControlsSchematicSaveEditsCommand", 0, 1, True, esriCommandStyles.esriCommandStyleIconAndText) m_menuSchematicLayer.AddItem("esriControls.ControlsSchematicUpdateDiagramCommand", 0, 2, False, esriCommandStyles.esriCommandStyleIconAndText) Dim subMenuDef As IMenuDef = New CreateSubMenuSchematic() 'Add the sub-menu as the third item on the Layer properties menu, making it start a new group m_menuSchematicLayer.AddSubMenu(subMenuDef, 3, True) m_menuSchematicLayer.AddItem(New ZoomToLayer, -1, 4, True, esriCommandStyles.esriCommandStyleTextOnly) m_menuLayer.AddItem(New RemoveLayer, -1, 0, False, esriCommandStyles.esriCommandStyleTextOnly) m_menuLayer.AddItem(New ZoomToLayer, -1, 1, True, esriCommandStyles.esriCommandStyleTextOnly) 'Set the hook of each menu m_menuSchematicLayer.SetHook(m_mapControl) m_menuLayer.SetHook(m_mapControl) End Sub #Region "Main Menu event handlers" Private Sub menuNewDoc_Click(ByVal sender As Object, ByVal e As EventArgs) Handles menuNewDoc.Click 'execute New Document command Dim command As ICommand = New CreateNewDocument() command.OnCreate(m_mapControl.Object) command.OnClick() End Sub Private Sub menuOpenDoc_Click(ByVal sender As Object, ByVal e As EventArgs) Handles menuOpenDoc.Click 'execute Open Document command Dim command As ICommand = New ControlsOpenDocCommandClass() command.OnCreate(m_mapControl.Object) command.OnClick() End Sub Private Sub menuSaveDoc_Click(ByVal sender As Object, ByVal e As EventArgs) Handles menuSaveDoc.Click 'execute Save Document command If m_mapControl.CheckMxFile(m_mapDocumentName) Then 'create a new instance of a MapDocument Dim mapDoc As IMapDocument = New MapDocumentClass() mapDoc.Open(m_mapDocumentName, String.Empty) 'Make sure that the MapDocument is not read only If mapDoc.IsReadOnly(m_mapDocumentName) Then MsgBox("Map document is read only!") mapDoc.Close() Return End If 'Replace its contents with the current map mapDoc.ReplaceContents(CType(m_mapControl.Map, IMxdContents)) 'save the MapDocument in order to persist it mapDoc.Save(mapDoc.UsesRelativePaths, False) 'close the MapDocument mapDoc.Close() End If End Sub Private Sub menuSaveAs_Click(ByVal sender As Object, ByVal e As EventArgs) Handles menuSaveAs.Click 'execute SaveAs Document command Dim command As ICommand = New ControlsSaveAsDocCommandClass() command.OnCreate(m_mapControl.Object) command.OnClick() End Sub Private Sub menuExitApp_Click(ByVal sender As Object, ByVal e As EventArgs) Handles menuExitApp.Click 'exit the application Application.Exit() End Sub #End Region 'listen to MapReplaced event in order to update the status bar and the Save menu Private Sub axMapControl1_OnMapReplaced(ByVal sender As Object, ByVal e As IMapControlEvents2_OnMapReplacedEvent) Handles axMapControl1.OnMapReplaced 'get the current document name from the MapControl m_mapDocumentName = m_mapControl.DocumentFilename 'if there is no MapDocument, disable the Save menu and clear the status bar If m_mapDocumentName = String.Empty Then menuSaveDoc.Enabled = False statusBarXY.Text = String.Empty Else 'enable the Save menu and write the doc name to the status bar menuSaveDoc.Enabled = True statusBarXY.Text = Path.GetFileName(m_mapDocumentName) End If End Sub Private Sub axMapControl1_OnMouseMove(ByVal sender As Object, ByVal e As IMapControlEvents2_OnMouseMoveEvent) Handles axMapControl1.OnMouseMove statusBarXY.Text = String.Format("{0}, {1} {2}", e.mapX.ToString("#######.##"), e.mapY.ToString("#######.##"), axMapControl1.MapUnits.ToString().Substring(4)) End Sub Private Sub AxTOCControl1_OnMouseDown(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent) Handles axTOCControl1.OnMouseDown If (e.button <> 2) Then Exit Sub Dim pItem As esriTOCControlItem Dim pMap As IMap = Nothing, pLayer As ILayer = Nothing Dim pOther As Object = Nothing, pIndex As Object = Nothing 'Determine what kind of item is selected m_pTocControl.HitTest(e.x, e.y, pItem, CType(pMap, IBasicMap), pLayer, pOther, pIndex) 'Ensure the item gets selected If (pItem = esriTOCControlItem.esriTOCControlItemMap) Then m_pTocControl.SelectItem(pMap, Nothing) Else m_pTocControl.SelectItem(pLayer, Nothing) End If 'Set the layer into the CustomProperty (this is used by the custom layer commands) m_mapControl.CustomProperty = pLayer Dim schLayer As ISchematicLayer schLayer = TryCast(pLayer, ISchematicLayer) If Not schLayer Is Nothing Then Dim schematicTarget As ISchematicTarget schematicTarget = TryCast(New ESRI.ArcGIS.SchematicControls.EngineSchematicEnvironmentClass(), ISchematicTarget) If (Not schematicTarget Is Nothing) Then schematicTarget.SchematicTarget = schLayer End If 'Popup the correct context menu If (pItem = esriTOCControlItem.esriTOCControlItemLayer) Then m_menuSchematicLayer.PopupMenu(e.x, e.y, m_pTocControl.hWnd) Else 'Popup the correct context menu If (pItem = esriTOCControlItem.esriTOCControlItemLayer) Then m_menuLayer.PopupMenu(e.x, e.y, m_pTocControl.hWnd) End If End Sub End Class