你的位置:首页 > ASP.net教程

[ASP.net教程]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();   //响应该命令                }

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