ArcEngine-MapControl与TocControl全部移除图层不联动问题

本文介绍了一种在自定义地图图层清除逻辑时遇到的问题及解决方案。当使用IMap.ClearLayers()方法清除图层后,Toc控件未能同步刷新。通过改用逐个删除图层的方法,成功解决了Toc控件的刷新问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

在自己编写全部移除图层菜单时,使用IMap.ClearLayers()方法MapControl里面的地图清除了,但是Toc控件并未刷新。情况如下

1、未清除前:

2、清除后

 

3、代码

  public void Excute()
        {
            if (m_BasicMap != null)
            {
                List<ILayer> listRemove = new List<ILayer>();
                for (int i = m_BasicMap.LayerCount-1; i >=0; i--)
                {
                    var layer = m_App.FocusMapControl.Map.get_Layer(i);
                    listRemove.Add(layer);
                }

                m_BasicMap.ClearLayers();    // 清空图层

                (m_BasicMap as IActiveView).Refresh();
            }
        }

 

解决方案:

使用Imap.DeleteLayer(ILayer)接口一个个依次删除。

 public void Excute()
        {
            if (m_BasicMap != null)
            {
                List<ILayer> listRemove = new List<ILayer>();
                for (int i = m_BasicMap.LayerCount-1; i >=0; i--)
                {
                    var layer = m_App.FocusMapControl.Map.get_Layer(i);
                    listRemove.Add(layer);
                }

                //m_BasicMap.ClearLayers();
                foreach (var item in listRemove)
                {
                    m_BasicMap.DeleteLayer(item);
                    ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(item);
                }

                (m_BasicMap as IActiveView).Refresh();
            }
        }

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值