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(); //响应该命令 }
这样即可成功解决该冲突问题