Add North Arrow Snippet (ArcObjects .NET 10.6 SDK)
ArcObjects Library Reference

Add North Arrow Snippet

Add a North Arrow to the Page Layout from the Map.

[C#]
///<summary>Add a North Arrow to the Page Layout from the Map.</summary>
///      
///<param name="pageLayout">An IPageLayout interface.</param>
///<param name="map">An IMap interface.</param>
///      
///<remarks></remarks>
public void AddNorthArrow(ESRI.ArcGIS.Carto.IPageLayout pageLayout, ESRI.ArcGIS.Carto.IMap map)
{
  
  if(pageLayout == null || map == null)
  {
    return;
  }
  ESRI.ArcGIS.Geometry.IEnvelope envelope=new ESRI.ArcGIS.Geometry.EnvelopeClass();
  envelope.PutCoords(0.2, 0.2, 5, 5); //  Specify the location and size of the north arrow

  ESRI.ArcGIS.esriSystem.IUID uid=new ESRI.ArcGIS.esriSystem.UIDClass();
  uid.Value="esriCarto.MarkerNorthArrow";

  // Create a Surround. Set the geometry of the MapSurroundFrame to give it a location
  // Activate it and add it to the PageLayout's graphics container
  ESRI.ArcGIS.Carto.IGraphicsContainer graphicsContainer=pageLayout as ESRI.ArcGIS.Carto.IGraphicsContainer; // Dynamic Cast
  ESRI.ArcGIS.Carto.IActiveView activeView=pageLayout as ESRI.ArcGIS.Carto.IActiveView; // Dynamic Cast
  ESRI.ArcGIS.Carto.IFrameElement frameElement=graphicsContainer.FindFrame(map);
  ESRI.ArcGIS.Carto.IMapFrame mapFrame=frameElement as ESRI.ArcGIS.Carto.IMapFrame; // Dynamic Cast
  ESRI.ArcGIS.Carto.IMapSurroundFrame mapSurroundFrame=mapFrame.CreateSurroundFrame(uid as ESRI.ArcGIS.esriSystem.UID, null); // Dynamic Cast
  ESRI.ArcGIS.Carto.IElement element=mapSurroundFrame as ESRI.ArcGIS.Carto.IElement; // Dynamic Cast
  element.Geometry=envelope;
  element.Activate(activeView.ScreenDisplay);
  graphicsContainer.AddElement(element, 0);
  ESRI.ArcGIS.Carto.IMapSurround mapSurround=mapSurroundFrame.MapSurround;

  // Change out the default north arrow
  ESRI.ArcGIS.Carto.IMarkerNorthArrow markerNorthArrow=mapSurround as ESRI.ArcGIS.Carto.IMarkerNorthArrow; // Dynamic Cast
  ESRI.ArcGIS.Display.IMarkerSymbol markerSymbol=markerNorthArrow.MarkerSymbol;
  ESRI.ArcGIS.Display.ICharacterMarkerSymbol characterMarkerSymbol=markerSymbol as ESRI.ArcGIS.Display.ICharacterMarkerSymbol; // Dynamic Cast
  characterMarkerSymbol.CharacterIndex=200; // change the symbol for the North Arrow
  markerNorthArrow.MarkerSymbol=characterMarkerSymbol;
}
[Visual Basic .NET]
'''<summary>Add a North Arrow to the Page Layout from the Map.</summary>
'''      
'''<param name="pageLayout">An IPageLayout interface.</param>
'''<param name="map">An IMap interface.</param>
'''      
'''<remarks></remarks>
Public Sub AddNorthArrow(ByVal pageLayout As ESRI.ArcGIS.Carto.IPageLayout, ByVal map As ESRI.ArcGIS.Carto.IMap)

  If pageLayout Is Nothing OrElse map Is Nothing Then

    Return

  End If

  Dim envelope As ESRI.ArcGIS.Geometry.IEnvelope=New ESRI.ArcGIS.Geometry.EnvelopeClass
  envelope.PutCoords(0.2, 0.2, 5, 5) ' Specify the location and size of the north arrow

  Dim uid As ESRI.ArcGIS.esriSystem.IUID=New ESRI.ArcGIS.esriSystem.UIDClass 
  uid.Value="esriCarto.MarkerNorthArrow"

  ' Create a Surround. Set the geometry of the MapSurroundFrame to give it a location
  ' Activate it and add it to the PageLayout's graphics container
  Dim graphicsContainer As ESRI.ArcGIS.Carto.IGraphicsContainer=TryCast(pageLayout, ESRI.ArcGIS.Carto.IGraphicsContainer) ' Dynamic Cast
  Dim activeView As ESRI.ArcGIS.Carto.IActiveView=TryCast(pageLayout, ESRI.ArcGIS.Carto.IActiveView) ' Dynamic Cast
  Dim frameElement As ESRI.ArcGIS.Carto.IFrameElement=graphicsContainer.FindFrame(map)
  Dim mapFrame As ESRI.ArcGIS.Carto.IMapFrame=TryCast(frameElement, ESRI.ArcGIS.Carto.IMapFrame) ' Dynamic Cast
  Dim mapSurroundFrame As ESRI.ArcGIS.Carto.IMapSurroundFrame=mapFrame.CreateSurroundFrame(TryCast(uid, ESRI.ArcGIS.esriSystem.UID), Nothing) ' Dynamic Cast
  Dim element As ESRI.ArcGIS.Carto.IElement=TryCast(mapSurroundFrame, ESRI.ArcGIS.Carto.IElement) ' Dynamic Cast
  element.Geometry=envelope
  element.Activate(activeView.ScreenDisplay)
  graphicsContainer.AddElement(element, 0)
  Dim mapSurround As ESRI.ArcGIS.Carto.IMapSurround=mapSurroundFrame.MapSurround

  ' Change out the default north arrow
  Dim markerNorthArrow As ESRI.ArcGIS.Carto.IMarkerNorthArrow=TryCast(mapSurround, ESRI.ArcGIS.Carto.IMarkerNorthArrow) ' Dynamic Cast
  Dim markerSymbol As ESRI.ArcGIS.Display.IMarkerSymbol=markerNorthArrow.MarkerSymbol
  Dim characterMarkerSymbol As ESRI.ArcGIS.Display.ICharacterMarkerSymbol=TryCast(markerSymbol, ESRI.ArcGIS.Display.ICharacterMarkerSymbol) ' Dynamic Cast
  characterMarkerSymbol.CharacterIndex=200 ' change the symbol for the North Arrow
  markerNorthArrow.MarkerSymbol=characterMarkerSymbol

End Sub

Additional Requirements
  • The code in this document requires the following References added to the Visual Studio project:
  • ESRI.ArcGIS.Carto
  • ESRI.ArcGIS.Display
  • ESRI.ArcGIS.Geometry
  • ESRI.ArcGIS.System