自己系統中本身對於放大縮小等功能直接是單獨重寫的,但是如果在加一個工具條具有相同功能的話兩者之間會有一些沖突,為解決該沖突可以重寫工具條的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(); //響應該命令 }
這樣即可成功解決該沖突問題