如何在ArcMap中监听键盘鼠标事件(转)

Link: http://www.cnblogs.com/dyllove98/p/3155551.html

昨天有个朋友想要实现一个功能,就是在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. 如何在ArcMap中监听键盘鼠标事件

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

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

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

  3. winform中键盘和鼠标事件的捕捉和重写

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

  4. vue 监听键盘回车事件 @keyup.enter || @keyup.enter.native

    vue运行为v-on在监听键盘事件时,添加了特殊的键盘修饰符:\ <input v-on:keyup.13="submit"> vue还非常贴心地给出了常用按键的别名, ...

  5. 如何在arcmap中调试addin或者插件

    1. 首先,在arcmap中,依次点击“自定义”->"加载项管理器",加载dll或者tlb文件 2. 其次,在vs中,依次点击“工具”->“附加到进程",在对 ...

  6. 如何正确响应ArcGIS JavaScript API中图形的鼠标事件

    在使用ArcGIS JavaScript API编写程序的时候,程序员往往需要完成这样一个功能:点击地图上的图形,自动进行专题GIS数据查询,当在地图非图形区域上点击时,自动进行底图兴趣点查询. 由于 ...

  7. Winform下WebBrowser 编辑模式 监听键盘按键事件

    最近使用 WebBrowser 做了个富文本编辑器(其实网上有很多很多).例如下面这个玩意(不要在意界面神马的) WebBrowser在编辑模式下可以有一些HTML标签的功能,改变字体大小颜色等等等. ...

  8. 如何在C#中使用全局鼠标、键盘Hook

    今天,有个同事问我,怎样在C#中使用全局钩子?以前写的全局钩子都是用unmanaged C或C++写个DLL来实现,可大家都知道,C#是基于.Net Framework的,是managed,怎么实现全 ...

  9. Vue监听键盘回车事件

    在写页面时遇见了登录页需要加一个键盘回车事件. vue 的 v-on中有这样的修饰符 <input v-on:keyup.enter="submit"> 即<in ...

随机推荐

  1. FZU 2169 shadow spfa

    题目链接:shadow 好佩服自己耶~~~好厉害~~~ 麻麻再也不用担心我的spfa 和 邻接表技能了~~~ spfa 记录最短路径. #include <stdio.h> #includ ...

  2. Informatica存储库和集成服务的配置

    1.配置存储库 首先登陆informatica的管理界面: 这里的用户名不区分大小写(注意后面配置集成服务是区分的,后面会提到)

  3. Fragment在Activity中跳转,实现类似新闻标题跳转新闻内容功能

    1.准备的工作,新闻数据类,新闻数据适配器,适配器的布局: News.java package com.example.zps.fourfragmentbestpractice; /** * Crea ...

  4. 集成学习之Boosting —— Gradient Boosting原理

    集成学习之Boosting -- AdaBoost原理 集成学习之Boosting -- AdaBoost实现 集成学习之Boosting -- Gradient Boosting原理 集成学习之Bo ...

  5. 20181009-6 选题 Scrum立会报告+燃尽图 05

    Scrum立会报告+燃尽图(05)选题 此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2195 一.小组介绍 组长:刘莹莹 ...

  6. fff

    https://qa.tutormeet.com/tutormeet/tutormeet_FF.html?lang=3&data=MjAxODAzMjcxODAwMTQ1OXwyNzQ2fGp ...

  7. 2018-2019-2 《网络对抗技术》Exp5 msf 20165222

    本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 总计:主动:ms17_010永恒之蓝(成功): 浏览器:office_word_hta(成功): 客户 ...

  8. C语言使用pthread多线程编程(windows系统)二

    我们进行多线程编程,可以有多种选择,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK实现了的线程库,如果你想让你的程序有更多的移植性你最好是选择POSIX中的Pthread函数库,我 ...

  9. JAVA面向对象编程课程设计——项目部署

    目录 一.Java环境的安装 1.下载 2.安装 3.配置环境变量 二.Tomcat的安装 1.下载 2.安装 3.启动Tomcat(默认已经安装好java环境,如果未安装java会报错.) 三.My ...

  10. Linux操作系统多线程信号总结

    linux 多线程信号编程总结 linux 多线程信号总结(一) 1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函 ...