昨天有个朋友想要实现一个功能,就是在ArcMap中编辑数据的时候,能够通过快捷键自动设置预定义的属性,比如,选中若干要素,按A键,就自动填充属性,按B键,则又自动填充另外的属性字段。

单就这个功能而言,可能不一定非得开发,或许直接在属性表里批量编辑也是个办法。但如果实现了这个功能,还可以引申出一些其他的应用,比如在要素编辑的时候自动进行质量检查;比如在地图浏览中添加许多预定义的效果等。

闲话不说,先介绍一下实现思路:ArcMap中本身是无法让你监听键盘事件的,显然需要通过开发。开发的途径,目前主要是通过Add-In。在Add-In中,我们需要写一个工具,由工具来实现对鼠标和键盘事件的监听。

详细理一下步骤:

1.开发一个Add-In插件;

2.在Add-In插件中,写一个工具;

3.将Add-In部署到ArcMap中;

4.用户点击Add-In插件的时候,代码里初始化工具,将其设置为地图的当前活动工具;

5.在工具类中,监听鼠标和键盘事件,执行所需的操作。

想必大家看了这几个步骤之后,觉得也没什么难度,事实上也如此,唯一需要注意的就是工具需要实现的接口,以及如何在Add-In里面初始化和调用工具。

下面是示例代码。

首先定义工具:

class HotKeyTool:ITool,ICommand,ICommandItem

注意该工具实现了ITool,ICommand,ICommandItem接口,其中ITool的OnKeyDown方法、OnMouseDown等方法,就是你的业务逻辑代码应该放的地方:

        //响应按键按下事件public void OnKeyDown(int keyCode, int shift){Keys key = (Keys)keyCode;      switch (key){case Keys.B:MessageBox.Show("S pressed");break;case Keys.C:MessageBox.Show("D pressed");break;case Keys.A:MessageBox.Show("A pressed");break;default:MessageBox.Show(key + " pressed~");break;}}

而ICommandItem的UID属性,则是非常关键的一个属性,需要生成一个UID值并返回。

        //此属性会被反复多次调用private UID uid = null;public ESRI.ArcGIS.esriSystem.UID ID{get {if (uid == null){uid = new UIDClass();uid.Value = "{6B76685B-31C5-4B69-8AC3-B6E9FE16D162}";}return uid; }}

工具类其它代码没有特别需要说明的,接下来看下如何初始化和调用工具:

        protected override void OnClick(){ArcMap.Application.CurrentTool = null;IMxDocument mxDoc = ArcMap.Document;IActiveView activeView = mxDoc.ActiveView;IMap map = activeView.FocusMap;//初始化工具,并将其与应用程序绑定HotKeyTool hotKeyTool = new HotKeyTool();hotKeyTool.App = ArcMap.Application;try{ICommandItem cmdItem = hotKeyTool as ICommandItem;//设置当前工具,以便处理键盘事件ArcMap.Application.CurrentTool = cmdItem;}catch (Exception ex){}}

代码很简单,思路也不复杂,如需完整代码,请在评论中留下邮箱。

如何在ArcMap中监听键盘鼠标事件相关推荐

  1. 如何在Revit中监听键盘事件

    欢迎加入BIM行业开发交流1群 群号:711844216(满),二群群号:1016453207 背景 小伙伴们在做revit二次开发的时候,可能会需要在自己做的插件运行时,去监听某个按键然后做出相应的 ...

  2. Vue中监听键盘事件

    Vue中监听键盘事件 在一些搜索框中,我们往往需要监听键盘的按下(onkeydown)或抬起(onkeyup)事件以进行一些操作.在原生js或者jQuery中,我们需要判断e.keyCode的值来获取 ...

  3. DW里面html鼠标点击特效,如何在Dreamweaver中设置手形鼠标样式效果

    如何在Dreamweaver中设置手形鼠标样式效果 1.按F7(或点击快速启动栏里那个象"八卦图"似的图标),调出CSS面板,选择"none",再点击面板下部的 ...

  4. JS监听键盘组合事件

    起因 今天看到一个需求,要是使用Alt+A快捷键实现某个功能. 可以监听键盘的事件 keydown keyup keypress都可以监听键盘事件. 他们之间的区别在于: keypress只能捕捉单个 ...

  5. Vue中监听键盘事件及自定义键盘事件

    在一些搜索框中,我们往往需要监听键盘的按下(onkeydown)或抬起(onkeyup)事件以进行一些操作.在原生js或者jQuery中,我们需要判断e.keyCode的值来获取用户所按的键.这样就存 ...

  6. vue 回车查询 按钮_vue之在页面中监听键盘的Enter键来触发某个按钮事件

    项目中得需求:给页面某个按钮绑定Enter键,但是按钮不在form中,直接给按钮绑定后此按钮只有获取了焦点按键才会触发,显然,一直保持按钮获取焦点是不现实得.所以通过查询等,结合项目需求,完成了下面得 ...

  7. winform中键盘和鼠标事件的捕捉和重写(转)

    在 编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作.比如编写一个处理图片的应用程序时, 希望无论当前哪个控件获得焦点,当用户按上.下.左. ...

  8. ios监听键盘删除事件

    文章来自于我的简书:原文在这里 监听键盘删除按钮的事件,常规做法是使用UITextField的textField:shouldChangeCharactersInRange:replacementSt ...

  9. python 关闭窗口事件_关于python:如何在Tkinter中处理窗口关闭事件?

    如何在Python Tkinter程序中处理窗口关闭事件(用户单击" X"按钮)? Tkinter支持一种称为协议处理程序的机制.在这里,术语协议是指应用程序和窗口管理器之间的交互 ...

最新文章

  1. HTML页面中使两个div并排显示
  2. android 打卡动画,android音视频打卡(-)3种方法绘制图片
  3. Windows UWP开发系列 – RelativePanel
  4. 用C#操作word替换字符,用spire
  5. 技术选型方案怎么写_活动运营方案怎么写?
  6. Java中线程池,你真的会用吗
  7. JavaScript中奇妙的replace
  8. Hashmap扩容时出现循环链表(jdk1.8把头插法换成了尾插法的原因)
  9. 江南大学计算机科学esi排名,喜忧参半!2021年5月ESI世界大学排行榜,21个学科排名数据分析!...
  10. 安卓抓包工具tcpdump
  11. 通向AGI(通用人工智能)的另类书单
  12. CIF/4CIF/QCIF/D1
  13. 机械汽修word模板素材推荐 精品 小众
  14. 新标准的发布关联的液相色谱-三重四极杆质谱技术的联用
  15. 12306 并不是我们想的那样
  16. django实现websocket作为安卓开发后台(软件课设,oo聊天)
  17. grpc加TLS加密和令牌认证
  18. MATLAB特殊矩阵的构造
  19. Imagination出席AIIA交流活动 PowerVR NNA IP入选首批《AI芯片技术选型目录》
  20. 三维点云数据集汇总(分类+检测+识别)

热门文章

  1. 微信打开网址后自动调用手机自带默认浏览器或提示选择浏览器打开如何实现...
  2. [HAOI2011]Problem b
  3. 监控Linux服务器网站状态的SHELL脚本
  4. crack笔记1 常用脱壳方法
  5. SQL Azure SU3 现已在全球6座数据中心开始启用
  6. python垃圾分类源代码_Python学习:怕乱丢垃圾罚款?使用 Python 轻松完成垃圾分类...
  7. 极大似然估计_计量经济学 | 极大似然估计
  8. php随机生成器加密,php生成随机密码的几种方法
  9. 服务器系统linux怎么安装教程,CentOS 8.0.1905 linux服务器系统安装与配置图解教程...
  10. java 从mysql 导出到excel_JAVA实现在数据库导出到EXCEL并下载