Posted By Patrick on 07-12-2009 04:38 PM
I found some more information.
The first time I call the function above, it works.
If I call the function above two times, then only the first call works and only 1 layer is visibly removed.
Of course, if the user minimise and the maximise the application, the 2 layers are removed, so it’s only a refreshing issue.
Patrick.
Patrick,
I tried the following codes and it works fine in version 3.0.348 both remove one and two layers in one button click events:
private void Form1_Load(object sender, EventArgs e)
{
winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
winformsMap1.CurrentExtent = new RectangleShape(-126.4, 48.8, -67.0, 19.0);
winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);
ShapeFileFeatureLayer worldShapeLayer = new ShapeFileFeatureLayer(@"…\PostsData\Countries02.shp");
worldShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1;
worldShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
ShapeFileFeatureLayer statesLayer = new ShapeFileFeatureLayer(@"…\PostsData\USStates.shp");
statesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.State1;
statesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.LineJoin = DrawingLineJoin.Round;
statesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
ShapeFileFeatureLayer majorCitiesShapeLayer = new ShapeFileFeatureLayer(@"…\PostsData\MajorCities.shp");
majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.City1;
majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.City1(“AREANAME”);
majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.BestPlacement = true;
majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay staticOverlay = new LayerOverlay();
staticOverlay.Layers.Add(“WorldShapeLayer”, worldShapeLayer);
staticOverlay.Layers.Add(“StatesLayer”, statesLayer);
staticOverlay.Layers.Add(“majorCitiesShapeLayer”, majorCitiesShapeLayer);
winformsMap1.Overlays.Add(“LayerOverlay”,staticOverlay);
winformsMap1.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{
LayerOverlay layerOverlay =(LayerOverlay) winformsMap1.Overlays[“LayerOverlay”];
layerOverlay.Lock.EnterWriteLock();
try
{
layerOverlay.Layers.Remove(“StatesLayer”);
}
finally
{
//Here should exit wirte lock instead of enter write lock again.
layerOverlay.Lock.ExitWriteLock();
}
winformsMap1.Refresh();
}
private void button2_Click(object sender, EventArgs e)
{
LayerOverlay layerOverlay = (LayerOverlay)winformsMap1.Overlays[“LayerOverlay”];
layerOverlay.Lock.EnterWriteLock();
try
{
layerOverlay.Layers.Remove(“StatesLayer”);
layerOverlay.Layers.Remove(“majorCitiesShapeLayer”);
}
finally
{
layerOverlay.Lock.ExitWriteLock();
}
winformsMap1.Refresh();
}
Let me know if you have any more problems.
Thanks.
Yale