C#+AE 调整TOCControl控件中图层的显示顺序

本文详细介绍了如何通过鼠标操作在ArcGIS Pro中调整图层顺序,包括事件监听、图层获取、索引计算和图层移动等步骤。重点展示了通过全局变量和事件回调函数实现图层在TOCControl和axMapControl中的动态调整。

基本思路如下:利用鼠标左键将需要调整顺序的图层移动至目标位置。

①需要涉及到TOCControl的OnMouseDown事件来获取要调整的图层,

②OnMouseUp事件获得目标图层和索引号,

③再利用IMap提供的MoveLayer方法,将相应调整axMapControl中的图层的显示顺序。

④最后使用TOCControl的Update方法来更新TOCControl控件中的显示顺序;

 

具体实现代码如下:

//全局变量
        public ITOCControl mTOCControl;
        public ILayer pMoveLayer;//需要被调整的图层;
        public int toIndex;//将要调整到的目标图层的索引;

//窗体加载

private void Form1_Load(object sender, EventArgs e)
        {
         
            this.axTOCControl1.SetBuddyControl(this.axMapControl1);
           mTOCControl=this.axTOCControl1.Object as ITOCControl;
        }

 

//TOCControl控件的OnMouseDown事件,获得需要被调整的图层

 private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
        {
            esriTOCControlItem item=esriTOCControlItem.esriTOCControlItemNone;
            if (e.button == 1)
            {
                IBasicMap map = null;
                ILayer layer = null;
                object other = null;
                object index = null;

                mTOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);
                if (item == esriTOCControlItem.esriTOCControlItemLayer)
                {
                    if(layer is IAnnotationSublayer)
                    {
                        return;
                    }
                    else
                    {
                        pMoveLayer = layer;
                    }
                }
               
            }
        }

//TOCControl控件的OnMouseUp事件,获得目标图层及索引

//并实现axMapControl中视图显示的索引的变化,并更新TOCControl控件中的显示顺序

private void axTOCControl1_OnMouseUp(object sender, ITOCControlEvents_OnMouseUpEvent e)
        {
            if (e.button == 1)
            {
                esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
                IBasicMap map = null;
                ILayer layer = null;
                object other = null;
                object index = null;

                mTOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);
                IMap pMap = this.axMapControl1.ActiveView.FocusMap;
                if(item==esriTOCControlItem.esriTOCControlItemLayer||layer!=null)
                {
                    if (pMoveLayer != null)
                    {
                        ILayer pTempLayer;
                        for (int i = 0; i < pMap.LayerCount; i++)
                        {
                            pTempLayer = pMap.get_Layer(i);
                            if (pTempLayer == layer)
                            {
                                toIndex = i;
                            }
                        }
                        pMap.MoveLayer(pMoveLayer,toIndex);
                        axMapControl1.ActiveView.Refresh();
                        mTOCControl.Update();
                    }
                }
            }
        }

转载于:https://www.cnblogs.com/yanhan/archive/2012/10/11/2720113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值