Add Shapefile Using OpenFileDialog Snippet (ArcObjects .NET 10.6 SDK)
ArcObjects Library Reference

Add Shapefile Using OpenFileDialog Snippet

Add a shapefile to the ActiveView using the Windows.Forms.OpenFileDialog control.

[C#]
///<summary>Add a shapefile to the ActiveView using the Windows.Forms.OpenFileDialog control.</summary>
///
///<param name="activeView">An IActiveView interface</param>
/// 
///<remarks></remarks>
public void AddShapefileUsingOpenFileDialog(ESRI.ArcGIS.Carto.IActiveView activeView)
{
  //parameter check
  if (activeView == null)
  {
    return;
  }

  // Use the OpenFileDialog Class to choose which shapefile to load.
  System.Windows.Forms.OpenFileDialog openFileDialog=new System.Windows.Forms.OpenFileDialog();
  openFileDialog.InitialDirectory="c:\\";
  openFileDialog.Filter="Shapefiles (*.shp)|*.shp";
  openFileDialog.FilterIndex=2;
  openFileDialog.RestoreDirectory=true;
  openFileDialog.Multiselect=false;


  if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    // The user chose a particular shapefile.

    // The returned string will be the full path, filename and file-extension for the chosen shapefile. Example: "C:\test\cities.shp"
    string shapefileLocation=openFileDialog.FileName;

    if (shapefileLocation != "")
    {
      // Ensure the user chooses a shapefile

      // Create a new ShapefileWorkspaceFactory CoClass to create a new workspace
      ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory=new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();

      // System.IO.Path.GetDirectoryName(shapefileLocation) returns the directory part of the string. Example: "C:\test\"
      ESRI.ArcGIS.Geodatabase.IFeatureWorkspace featureWorkspace=(ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(shapefileLocation), 0); // Explicit Cast

      // System.IO.Path.GetFileNameWithoutExtension(shapefileLocation) returns the base filename (without extension). Example: "cities"
      ESRI.ArcGIS.Geodatabase.IFeatureClass featureClass=featureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shapefileLocation));

      ESRI.ArcGIS.Carto.IFeatureLayer featureLayer=new ESRI.ArcGIS.Carto.FeatureLayerClass();
      featureLayer.FeatureClass=featureClass;
      featureLayer.Name=featureClass.AliasName;
      featureLayer.Visible=true;
      activeView.FocusMap.AddLayer(featureLayer);

      // Zoom the display to the full extent of all layers in the map
      activeView.Extent=activeView.FullExtent;
      activeView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGeography, null, null);
    }
    else
    {
      // The user did not choose a shapefile.
      // Do whatever remedial actions as necessary
      // System.Windows.Forms.MessageBox.Show("No shapefile chosen", "No Choice #1",
      //                                     System.Windows.Forms.MessageBoxButtons.OK,
      //                                     System.Windows.Forms.MessageBoxIcon.Exclamation);
    }
  }
  else
  {
    // The user did not choose a shapefile. They clicked Cancel or closed the dialog by the "X" button.
    // Do whatever remedial actions as necessary.
    // System.Windows.Forms.MessageBox.Show("No shapefile chosen", "No Choice #2",
    //                                      System.Windows.Forms.MessageBoxButtons.OK,
    //                                      System.Windows.Forms.MessageBoxIcon.Exclamation);
  }
}
[Visual Basic .NET]
'''<summary>Add a shapefile to the ActiveView using the Windows.Forms.OpenFileDialog control.</summary>
'''
'''<param name="activeView">An IActiveView interface</param>
''' 
'''<remarks></remarks>
Public Sub AddShapefileUsingOpenFileDialog(ByVal activeView As ESRI.ArcGIS.Carto.IActiveView)

  'parameter check
  If activeView Is Nothing Then

    Return

  End If

  ' Use the OpenFileDialog Class to choose which shapefile to load.
  Dim openFileDialog As System.Windows.Forms.OpenFileDialog=New System.Windows.Forms.OpenFileDialog
  openFileDialog.InitialDirectory="c:\"
  openFileDialog.Filter="Shapefiles (*.shp)|*.shp"
  openFileDialog.FilterIndex=2
  openFileDialog.RestoreDirectory=True
  openFileDialog.Multiselect=False

  If openFileDialog.ShowDialog=System.Windows.Forms.DialogResult.OK Then

    ' The user chose a particular shapefile.

    ' The returned string will be the full path, filename and file-extension for the chosen shapefile. Example: "C:\test\cities.shp"
    Dim shapefileLocation As String=openFileDialog.FileName

    If shapefileLocation <> "" Then

      ' Ensure the user chooses a shapefile

      ' Create a new ShapefileWorkspaceFactory CoClass to create a new workspace
      Dim workspaceFactory As ESRI.ArcGIS.Geodatabase.IWorkspaceFactory=New ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass

      ' System.IO.Path.GetDirectoryName(shapefileLocation) returns the directory part of the string. Example: "C:\test\"
      Dim featureWorkspace As ESRI.ArcGIS.Geodatabase.IFeatureWorkspace=CType(workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(shapefileLocation), 0), ESRI.ArcGIS.Geodatabase.IFeatureWorkspace) ' Explicit Cast

      ' System.IO.Path.GetFileNameWithoutExtension(shapefileLocation) returns the base filename (without extension). Example: "cities"
      Dim featureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass=featureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shapefileLocation))

      Dim featureLayer As ESRI.ArcGIS.Carto.IFeatureLayer=New ESRI.ArcGIS.Carto.FeatureLayerClass
      featureLayer.FeatureClass=featureClass
      featureLayer.Name=featureClass.AliasName
      featureLayer.Visible=True
      activeView.FocusMap.AddLayer(featureLayer)

      ' Zoom the display to the full extent of all layers in the map
      activeView.Extent=activeView.FullExtent
      activeView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGeography, Nothing, Nothing)

    Else

      ' The user did not choose a shapefile.
      ' Do whatever remedial actions as necessary
      ' System.Windows.Forms.MessageBox.Show("No shapefile chosen", "No Choice #1", System.Windows.Forms.MessageBoxButtons.OK,  System.Windows.Forms.MessageBoxIcon.Exclamation)

    End If

  Else

    ' The user did not choose a shapefile. They clicked Cancel or closed the dialog by the "X" button.
    ' Do whatever remedial actions as necessary.
    ' System.Windows.Forms.MessageBox.Show("No shapefile chosen", "No Choice #2", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation)

  End If

End Sub

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