ArcObjects Library Reference  

SelectionTargetComboBox

About the Custom selection extension Sample

[C#]

SelectionTargetComboBox.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Desktop.AddIns;
namespace SelectionSample
{
  public class SelectionTargetComboBox : ESRI.ArcGIS.Desktop.AddIns.ComboBox
  {
    private static SelectionTargetComboBox s_comboBox;
    private int m_selAllCookie;

    public SelectionTargetComboBox()
    {      
      m_selAllCookie = -1;
      s_comboBox = this;
    }
    
    internal static SelectionTargetComboBox GetSelectionComboBox()
    {
      return s_comboBox;
    }

    internal void AddItem(string itemName, IFeatureLayer layer)
    {
      if (s_comboBox.items.Count == 0)
      {
        m_selAllCookie = s_comboBox.Add("Select All");
        s_comboBox.Select(m_selAllCookie);
      }

      // Add each item to combo box.
      int cookie = s_comboBox.Add(itemName, layer);
    }

    internal void ClearAll()
    {
      m_selAllCookie = -1;
      s_comboBox.Clear();
    }

    protected override void OnUpdate()
    {
      this.Enabled = SelectionExtension.IsExtensionEnabled();
    }

    protected override void OnSelChange(int cookie)
    {
      if (cookie == -1)
        return;

      foreach (ComboBox.Item item in this.items)
      {
        // All feature layers are selectable if "Select All" is selected;
        // otherwise, only the selected layer is selectable.
        IFeatureLayer fl = item.Tag as IFeatureLayer;
        if (fl == null)
          continue;

        if (cookie == item.Cookie)
        {
          fl.Selectable = true;
          continue;
        }

        fl.Selectable = (cookie == m_selAllCookie)? true : false;
      }

      // Fire ContentsChanged event to cause TOC to refresh with new selected layers.
      ArcMap.Document.ActiveView.ContentsChanged(); ;

    }
  }

}
 
[Visual Basic .NET]

SelectionTargetComboBox.vb

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.IO
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Desktop.AddIns

Imports My

Namespace SelectionSample
  Public Class SelectionTargetComboBox
	  Inherits ESRI.ArcGIS.Desktop.AddIns.ComboBox
	Private Shared s_comboBox As SelectionTargetComboBox
	Private m_selAllCookie As Integer

	Public Sub New()
	  m_selAllCookie = -1
	  s_comboBox = Me
	End Sub

	Friend Shared Function GetSelectionComboBox() As SelectionTargetComboBox
	  Return s_comboBox
	End Function

	Friend Sub AddItem(ByVal itemName As String, ByVal layer As IFeatureLayer)
	  If s_comboBox.items.Count = 0 Then
		m_selAllCookie = s_comboBox.Add("Select All")
		s_comboBox.Select(m_selAllCookie)
	  End If

	  ' Add each item to combo box.
	  Dim cookie As Integer = s_comboBox.Add(itemName, layer)
	End Sub

	Friend Sub ClearAll()
	  m_selAllCookie = -1
	  s_comboBox.Clear()
	End Sub

	Protected Overrides Sub OnUpdate()
	  Me.Enabled = SelectionExtension.IsExtensionEnabled()
	End Sub

	Protected Overrides Sub OnSelChange(ByVal cookie As Integer)
	  If cookie = -1 Then
		Return
	  End If

	  For Each item As ComboBox.Item In Me.items
		' All feature layers are selectable if "Select All" is selected;
		' otherwise, only the selected layer is selectable.
		Dim fl As IFeatureLayer = TryCast(item.Tag, IFeatureLayer)
		If fl Is Nothing Then
		  Continue For
		End If

		If cookie = item.Cookie Then
		  fl.Selectable = True
		  Continue For
		End If

		fl.Selectable = If((cookie = m_selAllCookie), True, False)
	  Next item

	  ' Fire ContentsChanged event to cause TOC to refresh with new selected layers.
	  ArcMap.Document.ActiveView.ContentsChanged()


	End Sub
  End Class

End Namespace