About the Simple logging dockable window with a custom context menu Sample
[C#]
ClearLoggingCommand.cs
using System; using System.Drawing; using System.Runtime.InteropServices; using ESRI.ArcGIS.ADF.BaseClasses; using ESRI.ArcGIS.ADF.CATIDs; using ESRI.ArcGIS.Framework; using ESRI.ArcGIS.ArcMapUI; using ESRI.ArcGIS.esriSystem; namespace SimpleLogWindowCS { /// <summary> /// Summary description for ClearLoggingCommand. /// </summary> [Guid("b5820a63-e3d4-42a1-91c5-d90eacc3985b")] [ClassInterface(ClassInterfaceType.None)] [ProgId("SimpleLogWindowCS.ClearLoggingCommand")] public sealed class ClearLoggingCommand : BaseCommand { #region COM Registration Function(s) [ComRegisterFunction()] [ComVisible(false)] static void RegisterFunction(Type registerType) { // Required for ArcGIS Component Category Registrar support ArcGISCategoryRegistration(registerType); // // TODO: Add any COM registration code here // } [ComUnregisterFunction()] [ComVisible(false)] static void UnregisterFunction(Type registerType) { // Required for ArcGIS Component Category Registrar support ArcGISCategoryUnregistration(registerType); // // TODO: Add any COM unregistration code here // } #region ArcGIS Component Category Registrar generated code /// <summary> /// Required method for ArcGIS Component Category registration - /// Do not modify the contents of this method with the code editor. /// </summary> private static void ArcGISCategoryRegistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); MxCommands.Register(regKey); GxCommands.Register(regKey); GMxCommands.Register(regKey); SxCommands.Register(regKey); } /// <summary> /// Required method for ArcGIS Component Category unregistration - /// Do not modify the contents of this method with the code editor. /// </summary> private static void ArcGISCategoryUnregistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); MxCommands.Unregister(regKey); GxCommands.Unregister(regKey); GMxCommands.Unregister(regKey); SxCommands.Unregister(regKey); } #endregion #endregion private IApplication m_application; public ClearLoggingCommand() { base.m_category = ".NET Samples"; base.m_caption = "Clear Log (C#)"; base.m_message = "Clear items in logging dockable window"; base.m_toolTip = "Clear log"; base.m_name = "CSNETSamples_ClearLogCommand"; } #region Overriden Class Methods /// <summary> /// Occurs when this command is created /// </summary> /// <param name="hook">Instance of the application</param> public override void OnCreate(object hook) { if (hook == null) return; m_application = hook as IApplication; } /// <summary> /// Occurs when this command is clicked /// </summary> public override void OnClick() { //This command is designed to be on a context menu displayed when the //logging window is right-clicked. Get the context item of the application IDocument doc = m_application.Document; object contextItem = null; if (doc is IBasicDocument) { contextItem = ((IBasicDocument)doc).ContextItem; } IDockableWindow dockWin = null; UID logWindowID = new UIDClass(); logWindowID.Value = "{600cb3c8-e9d8-4c20-b2c7-f97082b10f92}"; if (contextItem != null && contextItem is IDockableWindow) { dockWin = (IDockableWindow)contextItem; } else //In the case of ArcCatalog or the command has been placed outside the designated context menu { //Get the dockable window directly IDockableWindowManager dockWindowManager = (IDockableWindowManager)m_application; dockWin = dockWindowManager.GetDockableWindow(logWindowID); } //Clear list items in the dockable window if (dockWin != null && dockWin.ID.Compare(logWindowID)) { System.Windows.Forms.ListBox containedBox = dockWin.UserData as System.Windows.Forms.ListBox; containedBox.Items.Clear(); } } #endregion } }
[Visual Basic .NET]
ClearLoggingCommand.vb
Imports System.Runtime.InteropServices Imports System.Drawing Imports ESRI.ArcGIS.ADF.BaseClasses Imports ESRI.ArcGIS.ADF.CATIDs Imports ESRI.ArcGIS.Framework Imports ESRI.ArcGIS.ArcMapUI Imports ESRI.ArcGIS.esriSystem <ComClass(ClearLoggingCommand.ClassId, ClearLoggingCommand.InterfaceId, ClearLoggingCommand.EventsId), _ ProgId("SimpleLogWindowVB.ClearLoggingCommand")> _ Public NotInheritable Class ClearLoggingCommand Inherits BaseCommand #Region "COM GUIDs" ' These GUIDs provide the COM identity for this class ' and its COM interfaces. If you change them, existing ' clients will no longer be able to access the class. Public Const ClassId As String = "af3e8998-c592-42cf-b9c3-04a5b8e8d47b" Public Const InterfaceId As String = "9e3086ca-2211-4e36-9113-4b9289596618" Public Const EventsId As String = "452b067e-8da7-41d8-b1d2-d6b1c2f4d49c" #End Region #Region "COM Registration Function(s)" <ComRegisterFunction(), ComVisibleAttribute(False)> _ Public Shared Sub RegisterFunction(ByVal registerType As Type) ' Required for ArcGIS Component Category Registrar support ArcGISCategoryRegistration(registerType) 'Add any COM registration code after the ArcGISCategoryRegistration() call End Sub <ComUnregisterFunction(), ComVisibleAttribute(False)> _ Public Shared Sub UnregisterFunction(ByVal registerType As Type) ' Required for ArcGIS Component Category Registrar support ArcGISCategoryUnregistration(registerType) 'Add any COM unregistration code after the ArcGISCategoryUnregistration() call End Sub #Region "ArcGIS Component Category Registrar generated code" ''' <summary> ''' Required method for ArcGIS Component Category registration - ''' Do not modify the contents of this method with the code editor. ''' </summary> Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type) Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID) GxCommands.Register(regKey) GMxCommands.Register(regKey) MxCommands.Register(regKey) SxCommands.Register(regKey) End Sub ''' <summary> ''' Required method for ArcGIS Component Category unregistration - ''' Do not modify the contents of this method with the code editor. ''' </summary> Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type) Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID) GxCommands.Unregister(regKey) GMxCommands.Unregister(regKey) MxCommands.Unregister(regKey) SxCommands.Unregister(regKey) End Sub #End Region #End Region Private m_application As IApplication ' A creatable COM class must have a Public Sub New() ' with no parameters, otherwise, the class will not be ' registered in the COM registry and cannot be created ' via CreateObject. Public Sub New() MyBase.New() MyBase.m_category = ".NET Samples" MyBase.m_caption = "Clear Log (VB.Net)" MyBase.m_message = "Clear items in logging dockable window" MyBase.m_toolTip = "Clear log" MyBase.m_name = "VBNETSamples_ClearLogCommand" End Sub Public Overrides Sub OnCreate(ByVal hook As Object) If Not hook Is Nothing Then m_application = CType(hook, IApplication) End If End Sub Public Overrides Sub OnClick() 'This command is designed to be on a context menu displayed when the 'logging window is right-clicked. Get the context item of the application Dim doc As IDocument = m_application.Document Dim contextItem As Object If TypeOf doc Is IBasicDocument Then contextItem = DirectCast(doc, IBasicDocument).ContextItem End If Dim dockWin As IDockableWindow Dim logWindowID As New UIDClass() logWindowID.Value = "{8582b32d-120c-407b-af34-8719b8960b30}" If contextItem IsNot Nothing AndAlso TypeOf contextItem Is IDockableWindow Then dockWin = DirectCast(contextItem, IDockableWindow) Else 'In the case of ArcCatalog or the command has been placed outside the designated context menu 'Get the dockable window directly Dim dockWindowManager As IDockableWindowManager = DirectCast(m_application, IDockableWindowManager) dockWin = dockWindowManager.GetDockableWindow(logWindowID) End If 'Clear list items in the dockable window If dockWin IsNot Nothing AndAlso dockWin.ID.Compare(logWindowID) Then Dim containedBox As System.Windows.Forms.ListBox = TryCast(dockWin.UserData, System.Windows.Forms.ListBox) containedBox.Items.Clear() End If End Sub End Class