About the Create a custom selection extension by extending ArcObjects Sample
[C#]
ZoomToLayerMultiItem.cs
using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.SystemUI;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.ArcMapUI;
namespace SelectionCOMSample
{
[Guid("B8147F77-BE16-4a43-A2F1-E6E030BD579E")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("SelectionCOMSample.ZoomToLayerMultiItem")]
public sealed class ZoomToLayerMultiItem : IMultiItem, IMultiItemEx
{
private IMap m_map;
private IMxDocument m_doc;
#region IMultiItem Members
public string Caption
{
get { return "Selection MultiItem C#"; }
}
public int HelpContextID
{
get { return 0; }
}
public string HelpFile
{
get { return ""; }
}
public string Message
{
get { return "Select layer to zoom to its full extent."; }
}
public string Name
{
get { return "ESRI_SelectionCOMSample_MultiItem"; }
}
public void OnItemClick(int index)
{
ESRI.ArcGIS.Carto.ILayer layer = m_map.get_Layer(index);
ESRI.ArcGIS.Geometry.IEnvelope env = layer.AreaOfInterest;
m_doc.ActiveView.Extent = env;
m_doc.ActiveView.Refresh();
}
public int OnPopup(object Hook)
{
IApplication app = Hook as IApplication;
if (app == null)
return 0;
m_doc = app.Document as IMxDocument;
m_map = m_doc.FocusMap;
return m_map.LayerCount;
}
public int get_ItemBitmap(int index)
{
return 0;
}
public string get_ItemCaption(int index)
{
ILayer layer = m_map.get_Layer(index);
if (layer != null)
return layer.Name;
else
return "";
}
public bool get_ItemChecked(int index)
{
return false;
}
public bool get_ItemEnabled(int index)
{
ILayer layer = m_map.get_Layer(index);
if (layer != null)
return layer.Visible;
else
return false;
}
#endregion
#region IMultiItemEx Members
public int get_ItemHelpContextID(int index)
{
return 0;
}
public string get_ItemHelpFile(int index)
{
return "";
}
public string get_ItemMessage(int index)
{
ILayer layer = m_map.get_Layer(index);
if (layer != null)
return layer.Name;
else
return "";
}
#endregion
}
}
[Visual Basic .NET]
ZoomToLayerMultiItem.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports ESRI.ArcGIS.SystemUI
Imports System.Runtime.InteropServices
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Framework
Imports ESRI.ArcGIS.ArcMapUI
Namespace SelectionCOMSample
<Guid("B8147F77-BE16-4a43-A2F1-E6E030BD579E"), ClassInterface(ClassInterfaceType.None), ProgId("SelectionCOMSample.ZoomToLayerMultiItem")> _
Public NotInheritable Class ZoomToLayerMultiItem
Implements IMultiItem, IMultiItemEx
Private m_map As IMap
Private m_doc As IMxDocument
#Region "IMultiItem Members"
Public ReadOnly Property Caption() As String Implements IMultiItem.Caption
Get
Return "Selection MultiItem VB.NET"
End Get
End Property
Public ReadOnly Property HelpContextID() As Integer Implements IMultiItem.HelpContextID
Get
Return 0
End Get
End Property
Public ReadOnly Property HelpFile() As String Implements IMultiItem.HelpFile
Get
Return ""
End Get
End Property
Public ReadOnly Property Message() As String Implements IMultiItem.Message
Get
Return "Select layer to zoom to its full extent."
End Get
End Property
Public ReadOnly Property Name() As String Implements IMultiItem.Name
Get
Return "ESRI_SelectionCOMSample_MultiItem"
End Get
End Property
Public Sub OnItemClick(ByVal index As Integer) Implements IMultiItem.OnItemClick
Dim layer As ESRI.ArcGIS.Carto.ILayer = m_map.Layer(index)
Dim env As ESRI.ArcGIS.Geometry.IEnvelope = layer.AreaOfInterest
m_doc.ActiveView.Extent = env
m_doc.ActiveView.Refresh()
End Sub
Public Function OnPopup(ByVal Hook As Object) As Integer Implements IMultiItem.OnPopup
Dim app As IApplication = TryCast(Hook, IApplication)
If app Is Nothing Then
Return 0
End If
m_doc = TryCast(app.Document, IMxDocument)
m_map = m_doc.FocusMap
Return m_map.LayerCount
End Function
Public ReadOnly Property ItemBitmap(ByVal index As Integer) As Integer Implements ESRI.ArcGIS.SystemUI.IMultiItem.ItemBitmap
Get
Return 0
End Get
End Property
Public ReadOnly Property ItemCaption(ByVal index As Integer) As String Implements ESRI.ArcGIS.SystemUI.IMultiItem.ItemCaption
Get
Dim layer As ILayer = m_map.Layer(index)
If layer IsNot Nothing Then
Return layer.Name
Else
Return ""
End If
End Get
End Property
Public ReadOnly Property ItemEnabled(ByVal index As Integer) As Boolean Implements ESRI.ArcGIS.SystemUI.IMultiItem.ItemEnabled
Get
Dim layer As ILayer = m_map.Layer(index)
If layer IsNot Nothing Then
Return layer.Visible
Else
Return False
End If
End Get
End Property
Public ReadOnly Property ItemChecked(ByVal index As Integer) As Boolean Implements ESRI.ArcGIS.SystemUI.IMultiItem.ItemChecked
Get
Return False
End Get
End Property
#End Region
#Region "IMultiItemEx Members"
Public ReadOnly Property ItemHelpContextID(ByVal index As Integer) As Integer Implements ESRI.ArcGIS.SystemUI.IMultiItemEx.ItemHelpContextID
Get
Return 0
End Get
End Property
Public ReadOnly Property ItemHelpFile(ByVal index As Integer) As String Implements ESRI.ArcGIS.SystemUI.IMultiItemEx.ItemHelpFile
Get
Return ""
End Get
End Property
Public ReadOnly Property ItemMessage(ByVal index As Integer) As String Implements ESRI.ArcGIS.SystemUI.IMultiItemEx.ItemMessage
Get
Dim layer As ILayer = m_map.Layer(index)
If layer IsNot Nothing Then
Return layer.Name
Else
Return ""
End If
End Get
End Property
#End Region
End Class
End Namespace