arcengine中自定义工具和自带工具条(ICommand)点击后和其他工具使用的冲突

自己系统中本身对于放大缩小等功能直接是单独重写的,但是如果在加一个工具条具有相同功能的话两者之间会有一些冲突,为解决该冲突可以重写工具条的OnItemClick事件

该工具条命名为axTool

我本身是在地图的鼠标点击事件中写的

代码如下:

 private void axMap_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) //操纵ae图面
        {
            IEnvelope pEnv;
            axMap.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
            IGeometry geometry = null;
            ESRI.ArcGIS.Geometry.Point point = new ESRI.ArcGIS.Geometry.PointClass();
            IGraphicsContainer pGC = axMap.ActiveView as IGraphicsContainer;

            axMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);//刷新所有图层
            switch (flag)
            {
                case 1:  //地图放大
                    pEnv = axMap.TrackRectangle();
                    pEnv.Expand(0.5, 0.5, true);
                    axMap.Extent = pEnv;
                    break;
                case 2:      //视图缩小
                    pEnv = axMap.Extent;
                    pEnv.Expand(2, 2, true);
                    axMap.Extent = pEnv;
                    break;
                case 3:   //视图平移
                    axMap.Pan();
                    break;

}

为解决冲突为axTool添加事件:

 private void axTool_OnItemClick(object sender, IToolbarControlEvents_OnItemClickEvent e)   //解决工具条点击后和其他工具使用的冲突
        {
            //先重置地图当前工具
            flag = -1;   //设置当前地图点击无效
            axMap.CurrentTool = null;   //设置当前地图工具为空
            int toolnum = e.index;      //获取工具条上点击工具的索引
            ICommand _command = axTool.CommandPool.get_Command(toolnum);  //根据该下标志获取点击命令
            axMap.CurrentTool = _command as ITool;    //设置当前地图的命令为该命令
            _command.OnClick();      //响应该命令                        
        }

这样即可成功解决该冲突问题

原文地址:https://www.cnblogs.com/smilepeter/p/5485028.html