<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Add-In Application Extension Behavior at ArcMap Startup in ArcObjects SDK Questions</title>
    <link>https://community.esri.com/t5/arcobjects-sdk-questions/add-in-application-extension-behavior-at-arcmap/m-p/590069#M15922</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Just for anyone's information, I have been on the phone with ESRI support and after many hours gotten an Add-In Application Extension to behave the way I wanted when its original AutoLoad property is set to False (the default wizard setting for an Application Extension).&amp;nbsp; I found that after the initial time the extension is used, whatever state the user left the Extension Manager in or the add-in UI element (dockable window open, button customized to a toolbar) is persisted when ArcMap is closed and will reappear in that state the next time ArcMap is opened.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you have tried the &lt;/SPAN&gt;&lt;A href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Sample_Custom_selection_extension/0001000003w2000000/" rel="nofollow noopener noreferrer" target="_blank"&gt;Custom Selection Extension sample&lt;/A&gt;&lt;SPAN&gt;, you might be led to believe that the extension checks to see if it is enabled automatically when ArcMap restarts, since this code appears to automatically fire the Extension's OnStartup method.&amp;nbsp; However, this is not really the case.&amp;nbsp; If the user left an Add-In Application Extension enabled when they closed ArcMap the OnStartup() method only fires if it is triggered by specific code contained in a UI Add-in type that fires its New method the next time ArcMap is opened.&amp;nbsp; In the sample above this is only accomplished if the toolbar opens immediately when ArcMap starts.&amp;nbsp; In that case, the toolbar registers its Add-in components, which in turn fire code to check the extension state, which then makes the extension actually fire it's Startup Method as ArcMap opens.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyway, if everytime ArcMap starts you want an Add-In dockable window the user left open to check to see if the Add-In Application Extension is enabled here is my suggested minimum code for the Dockable Window (all the code below will do is switch visibility between a label and a combobox on the dockable window depending on the Extension state when ArcMap opens or the extension is enabled or disabled in the Extension Manager):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Public Class MyDockableWindow
&amp;nbsp; Inherits UserControl
&amp;nbsp; Private Shared s_label As Label
&amp;nbsp; Private Shared s_combobox1 As System.Windows.Forms.ComboBox
&amp;nbsp; Private Shared s_enabled As Boolean

&amp;nbsp; Public Sub New(ByVal hook As Object)
&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Hook = hook
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_label = label1 ' set a shared variable to a label on the dockable window
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_comboBox1 = comboBox1 ' set a share variable to a combobox on the dockable window
&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Have the extension check its enabled status
&amp;nbsp;&amp;nbsp;&amp;nbsp; MyExtension.IsExtensionEnabled() ' replace "MyExtension" with your actual extension name.&lt;/STRONG&gt;
&amp;nbsp; End Sub

&amp;nbsp; ' Method called by the extension to set the state of the dockable window
&amp;nbsp; Friend Shared Sub SetEnabled(ByVal enabled As Boolean)
&amp;nbsp;&amp;nbsp;&amp;nbsp; MyExtension.IsExtensionEnabled()
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_enabled = enabled

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' if the dockable window was never displayed, combobox could be null
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_combobox Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; If enabled Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_label.Visible = False ' label saying extension is disabled appears
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_combobox1.Visible = True ' a combobox control appears if the extension is enabled
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_label.Visible = True ' Label saying extension is disabled disappears
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_combobox1.Visible = False ' a combobox control disappears if the extension is disabled
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
End Sub
&amp;nbsp; ''' &amp;lt;summary&amp;gt;
&amp;nbsp; ''' Host object of the dockable window
&amp;nbsp; ''' &amp;lt;/summary&amp;gt;
&amp;nbsp; Private privateHook As Object

' Standard code added by the Add-In dockable wizard
End Class&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then in the Add-In Application Extension here is my minimum suggested code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Public Class MyExtension ' replace with actual extension name
&amp;nbsp; Inherits ESRI.ArcGIS.Desktop.AddIns.Extension
&amp;nbsp; Private Shared s_dockWindow As ESRI.ArcGIS.Framework.IDockableWindow
&amp;nbsp; Private Shared s_extension As MyExtension ' replace with actual extension name

&amp;nbsp; ' Overrides
&amp;nbsp; Protected Overrides Sub OnStartup()
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_extension = Me

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Wire up events. Example events are commented below.&amp;nbsp; They require additional code.
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler ArcMap.Events.NewDocument, AddressOf ArcMap_NewOpenDocument
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler ArcMap.Events.OpenDocument, AddressOf ArcMap_NewOpenDocument

&amp;nbsp;&amp;nbsp;&amp;nbsp; Initialize()
&amp;nbsp; End Sub

&amp;nbsp; Protected Overrides Sub OnShutdown()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Uninitialize()

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Reverse whatever events you wired up.&amp;nbsp; Examples events are below&amp;nbsp; They require additional code.
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler ArcMap.Events.NewDocument, AddressOf ArcMap_NewOpenDocument
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler ArcMap.Events.OpenDocument, AddressOf ArcMap_NewOpenDocument

&amp;nbsp;&amp;nbsp;&amp;nbsp; s_dockWindow = Nothing
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_extension = Nothing

&amp;nbsp;&amp;nbsp;&amp;nbsp; MyBase.OnShutdown()
&amp;nbsp; End Sub
&amp;nbsp; 
&amp;nbsp;&amp;nbsp; Private Sub Initialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Or Me.State &amp;lt;&amp;gt; ExtensionState.Enabled Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Reset event handlers.&amp;nbsp; Examples are commented below.&amp;nbsp; They require additional code.

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Dim avEvent As IActiveViewEvents_Event = TryCast(ArcMap.Document.FocusMap, IActiveViewEvents_Event)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler avEvent.ItemAdded, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler avEvent.ItemDeleted, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler avEvent.ContentsChanged, AddressOf avEvent_ContentsChanged

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Update the UI
&amp;nbsp;&amp;nbsp;&amp;nbsp; MyDockableWindow.SetEnabled(True)
&amp;nbsp; End Sub

&amp;nbsp; Private Sub Uninitialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Detach event handlers.&amp;nbsp; Examples are commented below.
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Dim avEvent As IActiveViewEvents_Event = TryCast(m_map, IActiveViewEvents_Event)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler avEvent.ItemAdded, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler avEvent.ItemDeleted, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler avEvent.ContentsChanged, AddressOf avEvent_ContentsChanged
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' avEvent = Nothing

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Update the UI
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyDockableWindow.SetEnabled(False)
&amp;nbsp; End Sub

&amp;nbsp; Friend Shared Function GetDockableWindow() As ESRI.ArcGIS.Framework.IDockableWindow
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetExtension()
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Only get/create the dockable window if they ask for it
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_dockWindow Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim dockWinID As UID = New UIDClass()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dockWinID.Value = ThisAddIn.IDs.MyDockableWindow
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Return s_dockWindow
&amp;nbsp; End Function

&amp;nbsp; Protected Overrides Function OnSetState(ByVal state As ExtensionState) As Boolean
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Optionally check for a license here
&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.State = state

&amp;nbsp;&amp;nbsp;&amp;nbsp; If state = ExtensionState.Enabled Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Initialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Uninitialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Return MyBase.OnSetState(state)
&amp;nbsp; End Function

&amp;nbsp; Protected Overrides Function OnGetState() As ExtensionState
&amp;nbsp;&amp;nbsp;&amp;nbsp; Return Me.State
&amp;nbsp; End Function

&amp;nbsp; Friend Shared Function IsExtensionEnabled() As Boolean
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetExtension()
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return False
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Return s_extension.State = ExtensionState.Enabled
&amp;nbsp; End Function

&amp;nbsp; Private Shared Function GetExtension() As MyExtension ' replace the "MyExtension" type with your actual extension's name
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim extID As UID = New UIDClass()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extID.Value = ThisAddIn.IDs.MyExtension&amp;nbsp; ' replace the "MyExtension" type with your actual extension's name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Call FindExtension to load this just-in-time extension.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Application.FindExtensionByCLSID(extID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
&amp;nbsp;&amp;nbsp;&amp;nbsp; Return s_extension
&amp;nbsp; End Function
End Class&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Finally here is a button to launch the dockable window.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Public Class MyButton
&amp;nbsp; Inherits ESRI.ArcGIS.Desktop.AddIns.Button

&amp;nbsp; Public Sub New()

&amp;nbsp; End Sub

&amp;nbsp; Protected Overrides Sub OnClick()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim dockWindow As ESRI.ArcGIS.Framework.IDockableWindow
&amp;nbsp;&amp;nbsp;&amp;nbsp; dockWindow = MyExtension.GetDockableWindow()
&amp;nbsp;&amp;nbsp;&amp;nbsp; If dockWindow Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
&amp;nbsp;&amp;nbsp;&amp;nbsp; dockWindow.Show((Not dockWindow.IsVisible()))
&amp;nbsp; End Sub

&amp;nbsp; Protected Overrides Sub OnUpdate()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Enabled = MyExtension.IsExtensionEnabled()
&amp;nbsp; End Sub
End Class
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 12 Dec 2021 01:20:53 GMT</pubDate>
    <dc:creator>RichardFairhurst</dc:creator>
    <dc:date>2021-12-12T01:20:53Z</dc:date>
    <item>
      <title>Add-In Application Extension Behavior at ArcMap Startup</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/add-in-application-extension-behavior-at-arcmap/m-p/590069#M15922</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Just for anyone's information, I have been on the phone with ESRI support and after many hours gotten an Add-In Application Extension to behave the way I wanted when its original AutoLoad property is set to False (the default wizard setting for an Application Extension).&amp;nbsp; I found that after the initial time the extension is used, whatever state the user left the Extension Manager in or the add-in UI element (dockable window open, button customized to a toolbar) is persisted when ArcMap is closed and will reappear in that state the next time ArcMap is opened.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you have tried the &lt;/SPAN&gt;&lt;A href="http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Sample_Custom_selection_extension/0001000003w2000000/" rel="nofollow noopener noreferrer" target="_blank"&gt;Custom Selection Extension sample&lt;/A&gt;&lt;SPAN&gt;, you might be led to believe that the extension checks to see if it is enabled automatically when ArcMap restarts, since this code appears to automatically fire the Extension's OnStartup method.&amp;nbsp; However, this is not really the case.&amp;nbsp; If the user left an Add-In Application Extension enabled when they closed ArcMap the OnStartup() method only fires if it is triggered by specific code contained in a UI Add-in type that fires its New method the next time ArcMap is opened.&amp;nbsp; In the sample above this is only accomplished if the toolbar opens immediately when ArcMap starts.&amp;nbsp; In that case, the toolbar registers its Add-in components, which in turn fire code to check the extension state, which then makes the extension actually fire it's Startup Method as ArcMap opens.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyway, if everytime ArcMap starts you want an Add-In dockable window the user left open to check to see if the Add-In Application Extension is enabled here is my suggested minimum code for the Dockable Window (all the code below will do is switch visibility between a label and a combobox on the dockable window depending on the Extension state when ArcMap opens or the extension is enabled or disabled in the Extension Manager):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Public Class MyDockableWindow
&amp;nbsp; Inherits UserControl
&amp;nbsp; Private Shared s_label As Label
&amp;nbsp; Private Shared s_combobox1 As System.Windows.Forms.ComboBox
&amp;nbsp; Private Shared s_enabled As Boolean

&amp;nbsp; Public Sub New(ByVal hook As Object)
&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Hook = hook
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_label = label1 ' set a shared variable to a label on the dockable window
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_comboBox1 = comboBox1 ' set a share variable to a combobox on the dockable window
&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Have the extension check its enabled status
&amp;nbsp;&amp;nbsp;&amp;nbsp; MyExtension.IsExtensionEnabled() ' replace "MyExtension" with your actual extension name.&lt;/STRONG&gt;
&amp;nbsp; End Sub

&amp;nbsp; ' Method called by the extension to set the state of the dockable window
&amp;nbsp; Friend Shared Sub SetEnabled(ByVal enabled As Boolean)
&amp;nbsp;&amp;nbsp;&amp;nbsp; MyExtension.IsExtensionEnabled()
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_enabled = enabled

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' if the dockable window was never displayed, combobox could be null
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_combobox Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; If enabled Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_label.Visible = False ' label saying extension is disabled appears
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_combobox1.Visible = True ' a combobox control appears if the extension is enabled
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_label.Visible = True ' Label saying extension is disabled disappears
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_combobox1.Visible = False ' a combobox control disappears if the extension is disabled
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
End Sub
&amp;nbsp; ''' &amp;lt;summary&amp;gt;
&amp;nbsp; ''' Host object of the dockable window
&amp;nbsp; ''' &amp;lt;/summary&amp;gt;
&amp;nbsp; Private privateHook As Object

' Standard code added by the Add-In dockable wizard
End Class&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then in the Add-In Application Extension here is my minimum suggested code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Public Class MyExtension ' replace with actual extension name
&amp;nbsp; Inherits ESRI.ArcGIS.Desktop.AddIns.Extension
&amp;nbsp; Private Shared s_dockWindow As ESRI.ArcGIS.Framework.IDockableWindow
&amp;nbsp; Private Shared s_extension As MyExtension ' replace with actual extension name

&amp;nbsp; ' Overrides
&amp;nbsp; Protected Overrides Sub OnStartup()
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_extension = Me

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Wire up events. Example events are commented below.&amp;nbsp; They require additional code.
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler ArcMap.Events.NewDocument, AddressOf ArcMap_NewOpenDocument
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler ArcMap.Events.OpenDocument, AddressOf ArcMap_NewOpenDocument

&amp;nbsp;&amp;nbsp;&amp;nbsp; Initialize()
&amp;nbsp; End Sub

&amp;nbsp; Protected Overrides Sub OnShutdown()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Uninitialize()

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Reverse whatever events you wired up.&amp;nbsp; Examples events are below&amp;nbsp; They require additional code.
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler ArcMap.Events.NewDocument, AddressOf ArcMap_NewOpenDocument
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler ArcMap.Events.OpenDocument, AddressOf ArcMap_NewOpenDocument

&amp;nbsp;&amp;nbsp;&amp;nbsp; s_dockWindow = Nothing
&amp;nbsp;&amp;nbsp;&amp;nbsp; s_extension = Nothing

&amp;nbsp;&amp;nbsp;&amp;nbsp; MyBase.OnShutdown()
&amp;nbsp; End Sub
&amp;nbsp; 
&amp;nbsp;&amp;nbsp; Private Sub Initialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Or Me.State &amp;lt;&amp;gt; ExtensionState.Enabled Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Reset event handlers.&amp;nbsp; Examples are commented below.&amp;nbsp; They require additional code.

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Dim avEvent As IActiveViewEvents_Event = TryCast(ArcMap.Document.FocusMap, IActiveViewEvents_Event)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler avEvent.ItemAdded, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler avEvent.ItemDeleted, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' AddHandler avEvent.ContentsChanged, AddressOf avEvent_ContentsChanged

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Update the UI
&amp;nbsp;&amp;nbsp;&amp;nbsp; MyDockableWindow.SetEnabled(True)
&amp;nbsp; End Sub

&amp;nbsp; Private Sub Uninitialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Detach event handlers.&amp;nbsp; Examples are commented below.
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Dim avEvent As IActiveViewEvents_Event = TryCast(m_map, IActiveViewEvents_Event)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler avEvent.ItemAdded, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler avEvent.ItemDeleted, AddressOf AvEvent_ItemAdded
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' RemoveHandler avEvent.ContentsChanged, AddressOf avEvent_ContentsChanged
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' avEvent = Nothing

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Update the UI
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyDockableWindow.SetEnabled(False)
&amp;nbsp; End Sub

&amp;nbsp; Friend Shared Function GetDockableWindow() As ESRI.ArcGIS.Framework.IDockableWindow
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetExtension()
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Only get/create the dockable window if they ask for it
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_dockWindow Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim dockWinID As UID = New UIDClass()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dockWinID.Value = ThisAddIn.IDs.MyDockableWindow
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Return s_dockWindow
&amp;nbsp; End Function

&amp;nbsp; Protected Overrides Function OnSetState(ByVal state As ExtensionState) As Boolean
&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Optionally check for a license here
&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.State = state

&amp;nbsp;&amp;nbsp;&amp;nbsp; If state = ExtensionState.Enabled Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Initialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Uninitialize()
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Return MyBase.OnSetState(state)
&amp;nbsp; End Function

&amp;nbsp; Protected Overrides Function OnGetState() As ExtensionState
&amp;nbsp;&amp;nbsp;&amp;nbsp; Return Me.State
&amp;nbsp; End Function

&amp;nbsp; Friend Shared Function IsExtensionEnabled() As Boolean
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetExtension()
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return False
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If

&amp;nbsp;&amp;nbsp;&amp;nbsp; Return s_extension.State = ExtensionState.Enabled
&amp;nbsp; End Function

&amp;nbsp; Private Shared Function GetExtension() As MyExtension ' replace the "MyExtension" type with your actual extension's name
&amp;nbsp;&amp;nbsp;&amp;nbsp; If s_extension Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim extID As UID = New UIDClass()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extID.Value = ThisAddIn.IDs.MyExtension&amp;nbsp; ' replace the "MyExtension" type with your actual extension's name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Call FindExtension to load this just-in-time extension.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Application.FindExtensionByCLSID(extID)
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
&amp;nbsp;&amp;nbsp;&amp;nbsp; Return s_extension
&amp;nbsp; End Function
End Class&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Finally here is a button to launch the dockable window.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Public Class MyButton
&amp;nbsp; Inherits ESRI.ArcGIS.Desktop.AddIns.Button

&amp;nbsp; Public Sub New()

&amp;nbsp; End Sub

&amp;nbsp; Protected Overrides Sub OnClick()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim dockWindow As ESRI.ArcGIS.Framework.IDockableWindow
&amp;nbsp;&amp;nbsp;&amp;nbsp; dockWindow = MyExtension.GetDockableWindow()
&amp;nbsp;&amp;nbsp;&amp;nbsp; If dockWindow Is Nothing Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return
&amp;nbsp;&amp;nbsp;&amp;nbsp; End If
&amp;nbsp;&amp;nbsp;&amp;nbsp; dockWindow.Show((Not dockWindow.IsVisible()))
&amp;nbsp; End Sub

&amp;nbsp; Protected Overrides Sub OnUpdate()
&amp;nbsp;&amp;nbsp;&amp;nbsp; Me.Enabled = MyExtension.IsExtensionEnabled()
&amp;nbsp; End Sub
End Class
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 01:20:53 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/add-in-application-extension-behavior-at-arcmap/m-p/590069#M15922</guid>
      <dc:creator>RichardFairhurst</dc:creator>
      <dc:date>2021-12-12T01:20:53Z</dc:date>
    </item>
  </channel>
</rss>

