ArcEngine GroupLayer监听图层改变
最近项目中需要用到在TOC监听图层的变化,从而针对添加的不同图层进行不同的操作。但是当TOC中添加图层组时,无法监听到图层组中添加图层的动作。也就无法获取到向图层组中添加的图层。
在开发手册中也没有找到相应的事件接口来实现。于是就动手自己写了一个事件监听。
实现的思路是,自己构建事件接口,然后构建一个GroupLayer的子类来实现这个接口。
具体看代码:
///////////////////////////////
/////// 事件接口的代码
// 构建图层组图层增加的委托
public delegate void IGroupLayerEvents_ItemAddedEventHandler(object Item);
// 构建图层组图层移除的委托
public delegate void IGroupLayerEvents_ItemDeletedEventHandler(object Item);
// 构建图层组事件接口
public interface IGroupLayerEvents
{
// 增加项事件
event IGroupLayerEvents_ItemAddedEventHandler ItemAdded;
// 移除项事件
event IGroupLayerEvents_ItemDeletedEventHandler ItemDeleted;
}
////////////
///构建GroupLayerClass的子类
// 构建GrouplayerClassEx类继承Esri的GroupLayer并实现自定义的IG肉pLayerEvents接口
public class GroupLayerClassEx:GroupLayerClass,IGroupLayerEvents
{
#region IGroupLayerEvents 成员
public event IGroupLayerEvents_ItemAddedEventHandler ItemAdded;
public event IGroupLayerEvents_ItemDeletedEventHandler ItemDeleted;
#endregion
// 重写添加的方法
public override void Add(ILayer layer)
{
base.Add(layer);
// 实现事件
if (ItemAdded != null)
{
ItemAdded(layer);
}
}
// 重写清除的方法
public override void Clear()
{
// 遍历图层实现项减少的事件
if (ItemDeleted != null)
{
ICompositeLayer pCompositeLayer = this as ICompositeLayer;
for (int i = 0; i < pCompositeLayer.Count; i++)
{
ILayer pCurrentLayer = pCompositeLayer.get_Layer(i);
ItemDeleted(pCurrentLayer);
}
}
base.Clear();
}
// 重写删除的方法
public override void Delete(ILayer Layer)
{
base.Delete(Layer);
if (ItemDeleted != null)
{
ItemDeleted(Layer);
}
}
···
其他IGroupLayer接口实现的方法和属性都要override一遍。
···
}
在地图控件事件中进行监听
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
{
AxMapControl pAxMapControl = sender as AxMapControl;
// 注册事件
mEvent = pAxMapControl.ActiveView.FocusMap as IActiveViewEvents_Event;
mEvent.ItemAdded += new IActiveViewEvents_ItemAddedEventHandler(Event_ItemAdded);
mEvent.ItemDeleted += new IActiveViewEvents_ItemDeletedEventHandler(Event_ItemDeleted);
}
private void Event_ItemAdded(object Item)
{
if (Item is IGroupLayer)
{
IGroupLayerEvents pIGroupLayerEvents = Item as IGroupLayerEvents;
if (pIGroupLayerEvents != null)
{
pIGroupLayerEvents.ItemAdded += new IGroupLayerEvents_ItemAddedEventHandler(Event_ItemAdded);
pIGroupLayerEvents.ItemDeleted += new IGroupLayerEvents_ItemDeletedEventHandler(Event_ItemDeleted);
}
}
}
ArcEngine GroupLayer监听图层改变的更多相关文章
- 实时监听 JavaScript改变 input 值 input输入框内容 value 变化实时监听
思路:通过setInterval()方法去定时对比新旧值 当时候JavaScript的onchange 和onpropertychange(注意ie版本) 监听输入框input时间,人为改变值是可以触 ...
- 利用Node的chokidar 监听文件改变的文件。
最近维护一个项目.每次改完东西,都要上传到服务器.然后有时候就忘记一些东西,于是就想有没有可以方法能监听文件的改变.然后我再利用程序把更改的文件一键上传到服务器. 于是就找到了nodejs 的chok ...
- React router内是如何做到监听history改变的
问题背景 今天面试的时候,被问到这么个问题.在html5的history情况下,pushstate和replacestate是无法触发pushstate的事件的,那么他是怎么做到正确的监听呢?我当时给 ...
- js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写
js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写 一.总结 一句话总结:滚动事件scroll(),浏览器窗口调整监听resize(),思考好监听对象. 1.滚动事件scroll()的监听对象是 ...
- 2016-1-6第一个完整APP 私人通讯录的实现 2:增加提示用户的提示框,监听文本框
一:在登录时弹出提示用户的提示框: 1.使用第三方框架. 2.在登陆按钮点击事件中增加如下代码: - (IBAction)loginBtnClicked { NSString *acount = se ...
- ios中键值编码kvc和键值监听kvo的特性及详解
总结: kvc键值编码 1.就是在oc中可以对属性进行动态读写(以往都是自己赋值属性) 2. 如果方法属性的关键字和需要数据中的关键字相同的话 ...
- 如何监听input的脚本赋值
今天记录下我解决input值改变监听,大家肯定首先想到onchange方法.对于实时监听改变用onpropertychange.oninput等方法:可是,onchange并不能监听脚本改变的值,对于 ...
- Android 动态监听网络 断网重连
需求: 网络连接断开 弹出popupwindow 当前网络连接断开 网络恢复时popupwindow 消失重新请求网络. 需求描述完毕 上一张帅图 思路:广播 发送及时消息 断网flag popup ...
- Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮
效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...
随机推荐
- .NET开发微信小程序-微信支付
前台MD5加密代码 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algor ...
- Python_自定义栈
customStack.py '''栈:是一种运算受限的线性表,其特点在于仅允许在一端进行元素的插入和删除操作,最后入栈的最先出栈,而最先入栈的元素最后出栈''' s = [] s.append(3) ...
- Coding theano under remote ubuntu server from local Mac (在本地mac机器上,写、跑、调试、看-远程ubuntu上的theano代码)
本人是奇葩,最近鼓捣了一套在mac上coding远程ubuntu上的theano代码的东东,记之以期造福后人. Overview: 下图是我的编程环境和网络环境 我期望能在本地mac机器上对远程的ub ...
- 使用C++实现图形的旋转、缩放、平移
编译环境:VS2017 编译框架:MFC 实验内容:显示一个三角形,并将其绕中心进行旋转.缩放以及平移等操作 实验步骤: 1.打开VS2017,并创建MFC项目,具体方法参见:http://www.c ...
- PAT1102: Invert a Binary Tree
1102. Invert a Binary Tree (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
- nexus私服搭建及maven生命周期
一.maven找库流程 从流程上看创建nexus私服,能够优化流程,而且更加快速 二.nexus下载.安装 1.nexus下载地址 https://sonatype-download.global.s ...
- bind在onlick中的作用!
1:onClick={this.toRenderRight.bind(this,item.get('id'))}; 2:onClick={this.toRenderRight.(item.get('i ...
- javascript项目实战---ajax实现无刷新分页
分页: limit 偏移量,长度; limit 0,7; 第一页 limit 7,7; 第二页 limit 14,7; 第三页 每页信息条数:7 信息总条数:select count(*) from ...
- Flask开发微电影网站(三)
页面完成后的最终布局 可以看到,页面共同的部分是顶部导航和底部导航 所以我们可以把页面顶部导航和底部导航部分单独定义一个文件home.html,然后让需要使用顶部导航和底部导航的页面都继承home.h ...
- selenium 定位元素成功, 但是输入失败 (textarea)
问题描述 UI页面功能测试中, 定位元素并输入(通过sendKey()方法输入), 显示输入失败. 根本原因 为了修复一个bug, 这个元素从input改成了textarea, 而textarea是有 ...