C#2005+ArcGIS Engine9.1开发中OnSelectionChanged事件的bug

 

前面曾写过一篇博文,名字为《AxMapControlMapControl冲突及IMapControlEvents2_OnMouseDownEventHandler错误的解决方法》,主要讲的是C#2005+AE的开发中,双击MapControl产生的MouseDown事件错误,结果ESRI的事件错误还真不少,今天又让我给遇到了。本来想使用MapControlOnSelectionChanged事件,结果又发现了一个让我莫名其妙的错误。

我的目的是,当地图的选择集(ISelectionSet)发生变化时,弹出MessageBox告知用户目前选中的Feature的数目。但是当我从MapControl控件的属性管理器中,双击OnSelectionChanged产生事件代理和事件函数,并在事件函数内写好代码,运行后发现,选择集的变化并没有产生任何行为,这让我感到非常奇怪。后来仔细看了一下程序自动生成的事件代理和事件方法,发现居然是这样的:

 

this.axMapControl1.OnSelectionChanged += new System.EventHandler(this.axMapControl1_OnSelectionChanged);

 

        private void axMapControl1_OnSelectionChanged(object sender, EventArgs e)

        {

 

        }

 

不难发现,它自动生成的关于事件的代码,居然使用的是.NET事件代理和.NET事件参数,真是搞不懂为什么。没办法,只好自己用AO写一个了。使用的事件代理是:public delegate void IMapControlEvents2_OnSelectionChangedEventHandler(),但是却不知道axMapControl1_OnSelectionChanged()方法的参数到底是什么样子的呢?结果我先使用.NET对象浏览器来察看ESRI.ArcGIS.MapControl这个dll下的类,结果发现了ESRI.ArcGIS.MapControl.IMapControlEvents2_OnSelectionChangedEventHandler事件赫然在列,但是却没有提供ESRI.ArcGIS.MapControl.IMapControlEvents2_OnSelectionChangedEvent参数,而其他的所有事件一般都提供了相应的Event参数。于是再使用Reflector查看MapControl.dll,让人很奇怪的是,Reflector的解析的结果中却看不到任何IMapControlEvents2_OnSelectionChangedEventHandler的影子,原来ESRI提供的这个事件居然是个在.NET环境中的假货??(分别如图1和图2所示)

 

 

 

 

图1 。net对象浏览器结果

图2 Reflector解析结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值