Summary
The C# sample code below demonstrates how to add one or more layers to a Map by dragging shapefiles from Windows Explorer and dropping them onto the Map.
Procedure
The instructions below assume a C# Windows Application project has been created with a Map control added to the form and event procedures for DragFiles and DropFiles.
- Paste the following code into the DragFiles event procedure.
try
{
MapObjects2.Strings str =
(MapObjects2.Strings) e.fileNames;
if (str.Count > 0)
{
e.dropValid = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
- Paste the following code into the DropFiles event procedure.
try
{
MapObjects2.Strings str =(MapObjects2.Strings) e.fileNames;
if (str.Count > 0)
{
e.dropValid = true;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
private void axMap1_DropFiles(object sender, AxMapObjects2._DMapEvents_DropFilesEvent e)
{
try
{
DataConnection dc = new DataConnectionClass();
string shp;
string shpPath;
MapLayer ml;
ArrayList ptAl = new ArrayList();
ArrayList lineAL = new ArrayList();
ArrayList polyAL = new ArrayList();
ArrayList imgAL = new ArrayList();
MapObjects2.Strings str = (MapObjects2.Strings) e.fileNames;
shpPath = Path.GetDirectoryName(str.Item(0));
dc.Database = shpPath;
if (dc.Connect())
{
//Add dropped layers to Map
for(int i = 0; i < str.Count; i ++)
{
ml = new MapLayerClass();
shp = Path.GetFileNameWithoutExtension(str.Item(i));
ml.GeoDataset = dc.FindGeoDataset(shp);
axMap1.Layers.Add (ml);
}
//Sort layers
for (int j=0; j < axMap1.Layers.Count; j++)
{
//Check if it's a map layer or image layer
MapLayer lt =(MapLayer) axMap1.Layers.Item(j);
if (lt.LayerType == MapObjects2.LayerTypeConstants.moMapLayer)
{
switch (lt.shapeType)
{
case MapObjects2.ShapeTypeConstants.moShapeTypePoint:
ptAl.Add (axMap1.Layers.Item(j));
break;
case MapObjects2.ShapeTypeConstants.moShapeTypeLine:
lineAL.Add (axMap1.Layers.Item(j));
break;
case MapObjects2.ShapeTypeConstants.moShapeTypePolygon:
polyAL.Add (axMap1.Layers.Item(j));
break;
}
}
else
{
imgAL.Add (axMap1.Layers.Item(j));
}
}
}
axMap1.Layers.Clear();
//Add the layers to the map sorted by type
for (int k=0;k<imgAL.Count; k ++)
{
axMap1.Layers.Add (imgAL[k]);
}
for (int k = 0; k < polyAL.Count; k ++)
{
axMap1.Layers.Add(polyAL[k]);
}
for (int k = 0;k<lineAL.Count;k++)
{
axMap1.Layers.Add(lineAL[k]);
}
for (int k=0; k< polyAL.Count; k++)
{
axMap1.Layers.Add(polyAL[k]);
}
axMap1.Extent = axMap1.FullExtent;
axMap1.Refresh();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}