基于AE+C#实现在TOCControl中实现指定图层删除

  今天偷下懒,就不代码长篇长篇的复制粘贴了,给大家说一个AE小白如何实现TOCControl中实现选中图层删除的方法,有点蠢,但亲测有效。这里的响应时间逻辑是,单击选中TOCControl的图层,右击弹出contextMenuStrip快捷菜单,点击删除menuItem便可以实现删除选中图层,TOCControl的OnMouseDowm事件代码如下:

 private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
        {
            if (axMapControl1.LayerCount == 0)//图层为空时,返回
                return;
            esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;//创建TOCControl中item的实力
            IBasicMap map = null;
            ILayer layer = null;
            object other = null;

            object index = null;

          //由于TOCControl控件中是无法直接返回选中图层的索引的,因此需要调用HitTest方法,根据单击的x、y坐标返回相应的参数,包括选中图层、地图、索引等

            mTOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);
            if (e.button == 2)                //弹出右键菜单   
            {
                if (item == esriTOCControlItem.esriTOCControlItemLayer)//判断是否选中图层,因为该控件还可以选择map
                {
                    contextMenuStrip1.Show(axTOCControl1, e.x, e.y);//在鼠标单击位置弹出快捷菜单(以TOCControl控件为边界)
                    selLayer = layer;//selIlayer是一个Ilayer类的全局变量,表示已被选中的图层
                }
            }

        }

   ContextMenuStrip的删除menuItem响应的代码如下:(这里解释一下,我为什么不直接用索引来删除图层呢,因为亲测发现会出现些意料之外的问题,于是改用图层遍历来获取,如果可以用索引直接完成定位的不建议用以下复杂化的代码)

       for (int i = 0; i < axMapControl1.LayerCount; i++)
        {
             if (axMapControl1.get_Layer(i) == selLayer)//通过for循环得到选中图层索引,并直接调用DeleteLayer方法定点删除
             axMapControl1.DeleteLayer(i);
        }
        axMapControl1.ActiveView.Refresh();


你可能感兴趣的:(基于AE+C#实现在TOCControl中实现指定图层删除)