A multi-item is a dynamic collection of menu items created at run time. Multi-items are useful when the items on a menu cannot be determined prior to run time or the items need to be modified based on the state of the system. A good example of this is the menu items at the bottom of the File menu representing the most recently used files. Inherit this abstract class to create a multi-item that can act like several adjacent menu items.

Namespace:  ESRI.ArcGIS.Desktop.AddIns

Assembly:  ESRI.ArcGIS.Desktop.Addins (in ESRI.ArcGIS.Desktop.Addins.dll) Version: 10.0.0.0 (10.0.0.0)

Syntax

C#
public abstract class MultiItem : IDisposable
Visual Basic (Declaration)
Public MustInherit Class MultiItem _
	Implements IDisposable
Visual C++
public ref class MultiItem abstract : IDisposable

Remarks

Override OnPopup method to add items to the multiItem collection. Override OnClick method to perform the action when an item in the multiItem is clicked.

Examples

The code below shows an implementation of a multiItem that list all of the feature layers in the current map. Clicking on each item makes the map zoom to the corresponding layer.
CopyC#
public class ZoomToLayerMultiItem : ESRI.ArcGIS.Desktop.AddIns.MultiItem
{
  protected override void OnClick(Item item)
  {
    int index = this.IndexOf(item);
    System.Diagnostics.Debug.WriteLine("The index of the clicked item is " + index.ToString());
    ESRI.ArcGIS.Carto.IMap map = ArcMap.Document.FocusMap;
    ESRI.ArcGIS.Carto.ILayer layer = item.Tag as ESRI.ArcGIS.Carto.ILayer;
    ESRI.ArcGIS.Geometry.IEnvelope env = layer.AreaOfInterest;
    ArcMap.Document.ActiveView.Extent = env;
    ArcMap.Document.ActiveView.Refresh();

  }

  protected override void OnPopup(ItemCollection items)
  {
    ESRI.ArcGIS.Carto.IMap map = ArcMap.Document.FocusMap;
    for (int i = 0; i < map.LayerCount; i++)
    {
      ESRI.ArcGIS.Carto.ILayer layer = map.get_Layer(i);
      Item item = new Item();
      item.Caption = layer.Name;
      item.Enabled = layer.Visible;
      item.Message = layer.Name;
      item.Tag = layer;
      items.Add(item);
      item.BeginGroup = true;
    }
  }
}
CopyVB.NET
Public Class ZoomToLayerMultiItem
  Inherits ESRI.ArcGIS.Desktop.AddIns.MultiItem
  Protected Overloads Overrides Sub OnClick(ByVal item As Item)
    Dim index As Integer = Me.IndexOf(item)
    System.Diagnostics.Debug.WriteLine("The index of the clicked item is " & index.ToString())
    Dim map As ESRI.ArcGIS.Carto.IMap = ArcMap.Document.FocusMap
    Dim layer As ESRI.ArcGIS.Carto.ILayer = TryCast(item.Tag, ESRI.ArcGIS.Carto.ILayer)
    Dim env As ESRI.ArcGIS.Geometry.IEnvelope = layer.AreaOfInterest
    ArcMap.Document.ActiveView.Extent = env

    ArcMap.Document.ActiveView.Refresh()
  End Sub

  Protected Overloads Overrides Sub OnPopup(ByVal items As ItemCollection)
    Dim map As ESRI.ArcGIS.Carto.IMap = ArcMap.Document.FocusMap
    For i As Integer = 0 To map.LayerCount - 1
      Dim layer As ESRI.ArcGIS.Carto.ILayer = map.get_Layer(i)
      Dim item As New Item()
      item.Caption = layer.Name
      item.Enabled = layer.Visible
      item.Message = layer.Name
      item.Tag = layer
      items.Add(item)
      item.BeginGroup = True
    Next
  End Sub
End Class

Inheritance Hierarchy

System..::.Object

  ESRI.ArcGIS.Desktop.AddIns..::.MultiItem

See Also