遍历图层,判断是否为要素集图层ICompositeLayer和count是否为0,从下往上删,第一遍删除最下层的空要素集,直到没有空要素集结束。
//删除空要素集
private IList<ILayer> kongLayer = new List<ILayer>();//存储空要素集
private void DelLayer(IMapControlDefault mapcontrol)
{
ICompositeLayer pCompositeLayer;
for (int i = 0; i < mapcontrol.LayerCount; i++)
{
if (mapcontrol.get_Layer(i) is ICompositeLayer)
{
pCompositeLayer = mapcontrol.get_Layer(i) as ICompositeLayer;
if (pCompositeLayer.Count > 0)
{
Togetlayer(pCompositeLayer);
}
else
{
kongLayer.Add(mapcontrol.get_Layer(i));
}
}
}
for (int i = 0; i < kongLayer.Count; i++)
{
mapcontrol.Map.DeleteLayer(kongLayer[i]);//删除空要素集
}
//一直到没有空要素集跳出
if (kongLayer.Count > 0)
{
kongLayer.Clear();
DelLayer(mapcontrol);
}
}
//递归遍历所有要素集
private void Togetlayer(ICompositeLayer pCompositeLayer)
{
ILayer dellayer;
ICompositeLayer icolayer;
ICompositeLayer pcomLayer = pCompositeLayer;
if (pcomLayer.Count > 0)
{
for (int i = 0; i < pcomLayer.Count; i++)
{
if (pcomLayer.get_Layer(i) is ICompositeLayer)
{
icolayer = pcomLayer.get_Layer(i) as ICompositeLayer;
Togetlayer(icolayer);
}
}
}
else
{
dellayer = pcomLayer as ILayer;
kongLayer.Add(dellayer);
}
}