[AE] ArcGIS Engine - 右键目录树弹出属性框

右键目录树弹出属性框

方法介绍

使用目录树中测试打击的事件:ITOCControl.HitTest

传入打击的x,y坐标,告诉你点击到了哪个地方(地图、图层、对象的标题、图例),以对象引用的方式反馈给你

void HitTest(
	int X, //鼠标点击的横坐标
	int Y, //纵坐标
	ref esriTOCControlItem pTocItem, //esriTOCControlItem枚举常量
	ref IBasciMap pMap, //地图对象
	ref ILayer pLayer, //图层对象
	ref obejct pOther, //图例组对象(ILegendGroup obejct)
	ref object pIndex  //图例在图例组中的位置
);

其中:esriTOCControlItem枚举常量描述TOCControl上的Item类型定义

ConstantValueDescription
esriTOCControlItemNone0没有对象
esriTOCControlItemMap1map 对象
esriTOCControlItemLayer2layer 对象
esriTOCControlItemHeading3对象的标题
esriTOCControlItemLegendClass4Legendclass对象

代码

  1. 创建菜单,添加ContextMenuStrip控件,向快捷菜单中添加Item菜单项
  2. 每个菜单项Item的Click点击事件中添加相应代码
  3. 显示菜单,在axTOCControl1控件的指定位置弹出快捷菜单

详细:

  1. 创建ContextMenuStrip,并添加Item
    这里写图片描述
    这里写图片描述

  2. 为每个Item添加点击事件

     # region
     //显示所有图层
     private void contextMenuTurnLayersOn_Click(object sender, EventArgs e) 
     {
         for (int i = 0; i < axMapControl1.LayerCount; i++)
             axMapControl1.get_Layer(i).Visible = true;
         axMapControl1.ActiveView.Refresh();
     }
     //关闭所有图层
     private void contextMenuTurnLayersOff_Click(object sender, EventArgs e) 
     {
         for (int i = 0; i < axMapControl1.LayerCount; i++)
             axMapControl1.get_Layer(i).Visible = false;
         axMapControl1.ActiveView.Refresh();
     }
     //查看图层数
     private void contextMenuLayerCount_Click(object sender, EventArgs e) 
     {
         MessageBox.Show("图层数:" + axMapControl1.LayerCount.ToString());
     }
     //删除所有图层
     private void contextMenuClearLayers_Click(object sender, EventArgs e) 
     {
         axMapControl1.ClearLayers();
         axTOCControl1.Update();
     }
     //放大
     private void contextMenuZoonIn_Click(object sender, EventArgs e) 
     {
         ICommand pCommand = new ControlsMapZoomInToolClass();
         pCommand.OnCreate(axMapControl1.Object);
         axMapControl1.CurrentTool = pCommand as ITool;
     }
     //缩小
     private void contextMenuZoonOut_Click(object sender, EventArgs e) 
     {
         ICommand pCommand = new ControlsMapZoomOutToolClass();
         pCommand.OnCreate(axMapControl1.Object);
         axMapControl1.CurrentTool = pCommand as ITool;
     }
     //全屏
     private void contextMenuFullExtent_Click(object sender, EventArgs e) 
     {
         ICommand pCommand = new ControlsMapFullExtentCommandClass();
         pCommand.OnCreate(axMapControl1.Object);
         pCommand.OnClick();
     }
     //删除图层
     private void contextMenuDeleteLayer_Click(object sender, EventArgs e) 
     {
         axMapControl1.Map.DeleteLayer(pLayer);
     }
     //显示图层
     private void contextMenuTurnLayerOn_Click(object sender, EventArgs e) 
     {
         pLayer.Visible = true;
         axMapControl1.ActiveView.Refresh();
     }
     //上一个缩放大小
     private void goBackToPreviousExtentToolStripMenuItem_Click(object sender, EventArgs e) 
     {
         ICommand pCommand = new ControlsMapZoomToLastExtentBackCommandClass();
         pCommand.OnCreate(axMapControl1.Object);
         pCommand.OnClick();
     }
     //下一个缩放大小
     private void goToNextExtentToolStripMenuItem_Click(object sender, EventArgs e) 
     {
         ICommand pCommand = new ControlsMapZoomToLastExtentForwardCommandClass();
         pCommand.OnCreate(axMapControl1.Object);
         //axMapControl1.CurrentTool = pCommand as ITool;
         pCommand.OnClick();
     }
    
     private void identifyToolStripMenuItem_Click(object sender, EventArgs e)
     {
         ICommand pCommand = new ControlsMapIdentifyToolClass();
         pCommand.OnCreate(axMapControl1.Object);
         axMapControl1.CurrentTool = pCommand as ITool;
     }
    
     private void panToolStripMenuItem_Click(object sender, EventArgs e)
     {
         ICommand pCommand = new ControlsMapPanToolClass();
         pCommand.OnCreate(axMapControl1.Object);
         axMapControl1.CurrentTool = pCommand as ITool;
     }
    
     private void selectFeaturesToolStripMenuItem_Click(object sender, EventArgs e)
     {
         ICommand pCommand = new ControlsSelectFeaturesToolClass();
         pCommand.OnCreate(axMapControl1.Object);
         axMapControl1.CurrentTool = pCommand as ITool;
     }
    
     # endregion
    
  3. TOCControl被点击事件

     //初始化参数
     private esriTOCControlItem pTocItem = esriTOCControlItem.esriTOCControlItemNone;
     private IBasicMap pMap = null;
     private ILayer pLayer = null;
     private object pother = null;
     private object pindex = null;
    
     //TOCControl被点击事件
     private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
     {
         if (e.button == 1) //左键
             return;
         else if (e.button == 2)
         {
             axTOCControl1.HitTest(e.x, e.y, ref pTocItem, ref pMap, ref pLayer, ref pother, ref pindex);
             if (pTocItem == esriTOCControlItem.esriTOCControlItemMap) //打击到了地图
             {
                 contextMenuStrip1.Show(axTOCControl1, e.x, e.y);
             }
             else if (pTocItem == esriTOCControlItem.esriTOCControlItemLayer) //打击到了图层
             {
                 contextMenuStrip2.Show(axTOCControl1, e.x, e.y);
             }
         }
     }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geodoer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值