ArcEngine开发——从TocControl上获取鼠标点击位置的信息

      承接前一内容(ArcEngine开发——地图浏览)稍作界面调整,添加TOCControl、TextBox和两个Button控件,调整后如下:

     

      为了使TOCControl具有更多的功能,必须编写自己的代码。一个首当其冲的问题就是获取鼠标在TOCControl上点击的位置上所对应的信息,包括地图、图层或者图层符号等。实现这个功能,ArcEngine中提供了两个方法。其一是TOCControl封装的HitTest()方法,其二是GetSelectedItem()方法。

      先定义以下变量:

代码
 
   
1 private IBasicMap pBasicMap = new MapClass();
2 private ILayer pLayer = new FeatureLayerClass();
3 object oLegendGroup = new object ();
4 object oIndex = new object ();
5 esriTOCControlItem pTocItem = new esriTOCControlItem();

      使用HitTest()方法:

代码
 
   
1 axTOCControl1.HitTest(e.x, e.y, ref pTocItem, ref pBasicMap, ref pLayer, ref oLegendGroup, ref oIndex);
2 if (e.button == 1 )
3 {
4 if (pTocItem == esriTOCControlItem.esriTOCControlItemMap)
5 {
6 txtOutMsg.Text = " 当前单击的是地图 " + Environment.NewLine + " 地图名称: " + pBasicMap.Name + " 地图中图层数为: " + pBasicMap.LayerCount.ToString();
7 }
8 else if (pTocItem == esriTOCControlItem.esriTOCControlItemLayer)
9 {
10 txtOutMsg.Text = " 当前单击的是图层 " + Environment.NewLine + " 地图名称: " + pBasicMap.Name + " 地图中图层数为: " + pBasicMap.LayerCount.ToString() + Environment.NewLine + " 所点击的图层名称: " + pLayer.Name;
11 }
12 else if (pTocItem == esriTOCControlItem.esriTOCControlItemLegendClass)
13 {
14 txtOutMsg.Text = " 当前单击的是图层符号 " + Environment.NewLine + " 地图名称: " + pBasicMap.Name + " 地图中图层数为: " + pBasicMap.LayerCount.ToString() + Environment.NewLine + " 所点击的图层名称: " + pLayer.Name;
15 }
16 else if (pTocItem == esriTOCControlItem.esriTOCControlItemNone)
17 {
18 txtOutMsg.Text = " 当前单击为空白区域 " ;
19 }

      GetSelectedItem()方法相比HitTest()方法少了鼠标点击位置参数(e.x和e.y),其余参数一致,代码可按上照搬。

      二者的区别。要获取鼠标在TOCControl控件中点击位置所对应的信息,在TOCControl的MouseDown和MouseUp事件中使用HitTest()方法都是可以的;如果使用GetSelectedItem()方法,就只能在MouseUp事件中来写代码了。这是因为在发生MouseDown事件时,还没有完成TOCControl中Item的选中,如果在MouseDown事件中使用GetSelectedItem()方法获取的结果是上一次点击选中的Item,而不是当前这次点击的Item。还有一个小小的区别就是这两种方法对鼠标在TOCControl中点击的位置的“敏感度”不同。自己体验一下就知道了。

转载于:https://www.cnblogs.com/hans_gis/archive/2010/12/05/1896967.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值