右键目录树弹出属性框
方法介绍
使用目录树中测试打击的事件: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类型定义
Constant | Value | Description |
---|---|---|
esriTOCControlItemNone | 0 | 没有对象 |
esriTOCControlItemMap | 1 | map 对象 |
esriTOCControlItemLayer | 2 | layer 对象 |
esriTOCControlItemHeading | 3 | 对象的标题 |
esriTOCControlItemLegendClass | 4 | Legendclass对象 |
代码
- 创建菜单,添加ContextMenuStrip控件,向快捷菜单中添加Item菜单项
- 每个菜单项Item的Click点击事件中添加相应代码
- 显示菜单,在axTOCControl1控件的指定位置弹出快捷菜单
详细:
-
创建ContextMenuStrip,并添加Item
-
为每个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
-
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); } } }