博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在ArcMap中监听键盘鼠标事件
阅读量:6840 次
发布时间:2019-06-26

本文共 2406 字,大约阅读时间需要 8 分钟。

昨天有个朋友想要实现一个功能,就是在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)            {                            }                    }

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

 

 

转载地址:http://xowul.baihongyu.com/

你可能感兴趣的文章
jquery之行自加自减
查看>>
python生成wheel包注意事项
查看>>
单向链表的有关操作(链式存储结构)
查看>>
Spring @PostConstruct and @PreDestroy example
查看>>
软件架构师2
查看>>
单链表的操作
查看>>
没事抽空学——常用界面组件属性
查看>>
《程序员代码面试指南》第二章 链表问题 构造链表和节点的实体
查看>>
【LeanEAP.NET】精益企业应用平台---源码&Demo下载
查看>>
Django restfulframework 开发相关知识 整理
查看>>
去掉数组中重复的数字。
查看>>
Poj 2887-Big String Splay
查看>>
docker笔记-docker-container
查看>>
SuperSocket 服务管理器 (ServerManager)
查看>>
Eclipse launch failed.Binary not found解决方案
查看>>
NSGA-II入门C1
查看>>
结对第2次作业——WordCount进阶需求
查看>>
两个经典递归问题:菲波那契数列 + 汉诺塔
查看>>
php中处理xml文件的类 simpleXML
查看>>
结构体内字节手动对齐(#pragam pack)
查看>>