今天偷下懒,就不代码长篇长篇的复制粘贴了,给大家说一个AE小白如何实现TOCControl中实现选中图层删除的方法,有点蠢,但亲测有效。这里的响应时间逻辑是,单击选中TOCControl的图层,右击弹出contextMenuStrip快捷菜单,点击删除menuItem便可以实现删除选中图层,TOCControl的OnMouseDowm事件代码如下:
private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
{
if (axMapControl1.LayerCount == 0)//图层为空时,返回
return;
esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;//创建TOCControl中item的实力
IBasicMap map = null;
ILayer layer = null;
object other = null;
object index = null;
//由于TOCControl控件中是无法直接返回选中图层的索引的,因此需要调用HitTest方法,根据单击的x、y坐标返回相应的参数,包括选中图层、地图、索引等
mTOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);if (e.button == 2) //弹出右键菜单
{
if (item == esriTOCControlItem.esriTOCControlItemLayer)//判断是否选中图层,因为该控件还可以选择map
{
contextMenuStrip1.Show(axTOCControl1, e.x, e.y);//在鼠标单击位置弹出快捷菜单(以TOCControl控件为边界)
selLayer = layer;//selIlayer是一个Ilayer类的全局变量,表示已被选中的图层
}
}
}
ContextMenuStrip的删除menuItem响应的代码如下:(这里解释一下,我为什么不直接用索引来删除图层呢,因为亲测发现会出现些意料之外的问题,于是改用图层遍历来获取,如果可以用索引直接完成定位的不建议用以下复杂化的代码)
for (int i = 0; i < axMapControl1.LayerCount; i++)
{
if (axMapControl1.get_Layer(i) == selLayer)//通过for循环得到选中图层索引,并直接调用DeleteLayer方法定点删除
axMapControl1.DeleteLayer(i);
}
axMapControl1.ActiveView.Refresh();