如何在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中监听键盘鼠标事件(转)的更多相关文章
- 如何在ArcMap中监听键盘鼠标事件
昨天有个朋友想要实现一个功能,就是在ArcMap中编辑数据的时候,能够通过快捷键自动设置预定义的属性,比如,选中若干要素,按A键,就自动填充属性,按B键,则又自动填充另外的属性字段. 单就这个功能而言 ...
- winform中键盘和鼠标事件的捕捉和重写(转)
在 编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作.比如编写一个处理图片的应用程序时, 希望无论当前哪个控件获得焦点,当用户按上.下.左. ...
- winform中键盘和鼠标事件的捕捉和重写
在编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作.比如编写一个处理图片的应用程序时,希望无论当前哪个控件获得焦点,当用户按上.下.左.右键 ...
- vue 监听键盘回车事件 @keyup.enter || @keyup.enter.native
vue运行为v-on在监听键盘事件时,添加了特殊的键盘修饰符:\ <input v-on:keyup.13="submit"> vue还非常贴心地给出了常用按键的别名, ...
- 如何在arcmap中调试addin或者插件
1. 首先,在arcmap中,依次点击“自定义”->"加载项管理器",加载dll或者tlb文件 2. 其次,在vs中,依次点击“工具”->“附加到进程",在对 ...
- 如何正确响应ArcGIS JavaScript API中图形的鼠标事件
在使用ArcGIS JavaScript API编写程序的时候,程序员往往需要完成这样一个功能:点击地图上的图形,自动进行专题GIS数据查询,当在地图非图形区域上点击时,自动进行底图兴趣点查询. 由于 ...
- Winform下WebBrowser 编辑模式 监听键盘按键事件
最近使用 WebBrowser 做了个富文本编辑器(其实网上有很多很多).例如下面这个玩意(不要在意界面神马的) WebBrowser在编辑模式下可以有一些HTML标签的功能,改变字体大小颜色等等等. ...
- 如何在C#中使用全局鼠标、键盘Hook
今天,有个同事问我,怎样在C#中使用全局钩子?以前写的全局钩子都是用unmanaged C或C++写个DLL来实现,可大家都知道,C#是基于.Net Framework的,是managed,怎么实现全 ...
- Vue监听键盘回车事件
在写页面时遇见了登录页需要加一个键盘回车事件. vue 的 v-on中有这样的修饰符 <input v-on:keyup.enter="submit"> 即<in ...
随机推荐
- java Object对象的clone方法
参考copy链接:http://blog.csdn.net/bigconvience/article/details/25025561 在看原型模式,发现要用到clone这个方法,以前和朋友聊过,没怎 ...
- @InitBinder装配自定义编辑器
@InitBinder装配自定义编辑器 第一步:BaseController.java,标注@InitBinder public class BaseController { @InitBinder ...
- 记录一些js框架用途
accounting.min.js 货币格式化alertify.min.js 提示信息库amd.loader.js 按需动态加载js文件angular-cookies.js 处理cookieangul ...
- streamsets 数据流设计
streamsets 支持branch(分支)&& merge(合并)模式的数据流 branch 数据流 如下图: 我们可以根据数据包含的字段进行拆分,不同的数据流处理自己关注的数据 ...
- ORA-01033: ORACLE initialization or shutdown in progress --手动删除表空间 DBF 后无法登陆问题
进入CMD,执行set ORACLE_SID=fbms,确保连接到正确的SID: 2.执行sqlplus "/as sysdba" SQL>shutdown immediat ...
- 解决Mybatis没有代码提示
MyBatis xml文件中代码自动提示 工具/原料 eclipse,maven 方法/步骤 1 一.获得mybatis-3-config.dtd.mybatis-3-mapper.dtd 这 ...
- 【转】linux中inittab文件详解
原文网址:http://www.2cto.com/os/201108/98426.html linux中inittab文件详解 init的进程号是1(ps -aux | less),从这一点就能看出, ...
- ASP/ASP.NET/VB6文件上传
1. asp asp 上传文件真的蛋疼,很麻烦,有时候就用第三方组件,或者比较复杂的写法来实现无组件上传. 测试OK的一个叫风声无组件上传类 V2.1 [Fonshen UpLoadClass Ver ...
- C#使用WebService
一.新建webservice 新建项目→asp.net Web服务应用程序 或者在现有项目中 点击右键 新建web服务程序asmx 只要在webservice类里面 的方法 标注为[WebMethod ...
- bzoj 3879: SvT
Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始 ...