本节将向你介绍,利用ToolStrip制作自定义GIS工具条。

步骤如下:

①向ToolStrip中添加一个Button

②向该Button的lmg属性添加图片素材,并将Button的图片比例(ImageScaling)属性设置为自动适应(SizetoFit),自动调整大小(AutoSzize)为真(True)。最后通过调整ToolStrip的图片尺寸缩放比例(lmageSealingSize)为合适尺寸,例如width:48,height:48,最后再手动调节控件的大小。

③双击Buton,在其单击事件下写代码。

本例实现的代码如下:

/// <summary>
/// 放大工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ZoomIntoolStripButton1_Click(object sender, EventArgs e)
{
//当选中为数据制图时
if (tabControl1.SelectedIndex == )
{
//ICommand提供对定义COM命令的成员的访问。
ICommand pCommand = new ControlsMapZoomInToolClass();
//将ICommand强转成ITool
ITool pTool = pCommand as ITool;
//调用ICommand中的OnCreate方法生成放大工具
pCommand.OnCreate(this.axMapControl1.Object);
//设置放大工具命令的作用对象为axMapControl1
this.axMapControl1.CurrentTool = pTool;
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
//ICommand提供对定义COM命令的成员的访问。
ICommand pCommand = new ControlsMapZoomInToolClass();
//将ICommand强转成ITool
ITool pTool = pCommand as ITool;
//调用ICommand中的OnCreate方法生成放大工具
pCommand.OnCreate(this.axPageLayoutControl1.Object);
//设置放大工具命令的作用对象为axPageLayoutControl1
this.axPageLayoutControl1.CurrentTool = pTool;
} }
/// <summary>
/// 缩小工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ZoomOuttoolStripButton2_Click(object sender, EventArgs e)
{
//当选中为数据视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapZoomOutToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axMapControl1.CurrentTool = pTool;
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapZoomOutToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
} /// <summary>
/// 漫游工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PantooltoolStripButton4_Click(object sender, EventArgs e)
{
//当选中为数据视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapPanToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapPanToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
} /// <summary>
/// 全图工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ZoomFulltoolStripButton3_Click(object sender, EventArgs e)
{
//当选中为数据视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapFullExtentCommandClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axMapControl1.CurrentTool = pTool;
pCommand.OnClick();
}
//当选中为布局视图时
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsMapFullExtentCommandClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
pCommand.OnClick();
}
}
/// <summary>
/// 指针选择工具
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SelecttoolStripButton1_Click(object sender, EventArgs e)
{
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsSelectFeaturesToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axMapControl1.Object);
this.axMapControl1.CurrentTool = pTool;
}
if (tabControl1.SelectedIndex == )
{
ICommand pCommand = new ControlsSelectFeaturesToolClass();
ITool pTool = pCommand as ITool;
pCommand.OnCreate(this.axPageLayoutControl1.Object);
this.axPageLayoutControl1.CurrentTool = pTool;
}
}

注:

1、数据视图和布局视图的控件是不同的。

2、全图工具需要添加以下代码,才能生效。

pCommand.OnClick();

3、其他工具的制作方法大同小异!


核心DIY工具函数总结:

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

												

ArcGIS Engine制作DIY地图工具的更多相关文章

  1. ArcGIS Engine开发之地图基本操作(2)

    地图数据的加载 1.加载地图文档 ArcGIS Engine支持加载多种类型的数据,有矢量数据的Coverage.Shapefile.dwg/dxf文件,栅格数据的BMP.GRID.控件数据库等.很多 ...

  2. ArcGIS Engine开发之地图基本操作(3)

    地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...

  3. ArcGIS Engine开发之地图基本操作(4)

    ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...

  4. ArcGIS Engine开发之地图浏览

    地图的浏览功能包括缩放.移动.量测旋转等. 1.放大与缩小 无论是放大还是缩小,都是通过改变MapControl中当前视图的范围Extent属性来实现的,主要用到包络线(Envelope)类. 包络线 ...

  5. ArcGIS Engine开发之地图基本操作(1)

    ArcGIS提供的各类数据形式以及相应接口 1. 空间数据 在GIS软件中,空间数据有多种不同的形式存在.按照不同的划分标准可以分为矢量数据和栅格数据.GIS格式数据和非GIS格式数据(CAD格式). ...

  6. ArcGIS Engine开发之地图导出

    关于地图导出的方法有很多,但是核心技术就那么一点.下面是从项目实战中总结的一部分地图导出的方法:(以全域导出和区域导出为例) 1.由于地图导出用到的函数和方法容易重复,增加了工作量故首先将其进行封装成 ...

  7. ArcGIS Engine环境下创建自定义的ArcToolbox Geoprocessing工具

    在上一篇日志中介绍了自己通过几何的方法合并断开的线要素的ArcGIS插件式的应用程序.但是后来考虑到插件式的程序的配置和使用比较繁琐,也没有比较好的错误处理机制,于是我就把之前的程序封装成一个类似于A ...

  8. 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发

    原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...

  9. 使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

随机推荐

  1. shell 获取当前目录下的jar文件

    1.示例 function getDir() { ` do fileName=$"/"$item if [ -d $fileName ] then echo $fileName&q ...

  2. MongoDB4.0支持事务管理

    ​ 背景 最后我们看一下MongoDB的事务管理,本来是没这一篇的,因为网上大部分资料太老,都为MongoDB之前的版本,的确在MongoDB 4.0版本之前是没有事务管理,但是今天年初MongoDB ...

  3. 十大排序算法JavaScript实现总结

    花费了几周的时间断断续续的练习和模仿与使用JavaScript代码实现了十大排序算法. 里面有每种算法的动图和静态图片演示,看到图片可以自己先按照图片的思路实现一下. github中正文链接,点击查看 ...

  4. 如何将腾讯视频的qlv格式转换为mp4格式

    基本上每个视频app都会有自己固有的视频播放格式,比如优酷的KUX.爱奇艺的QSV和腾讯的QLV等.而今天我们重点介绍腾讯的QLV格式如何转换为MP4格式,小便也是经过多次的摸索多次的软件试用,发现的 ...

  5. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

  6. python获取全国各个城市pm2.5、臭氧等空气质量

    随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空 ...

  7. java 远程方法调用(RMI)

    什么是RMI? 维基百科:一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远程服务器上的对象. 什么是序列化及反序列化 (1)序列化:把对象转换为字节序列的过程称为对象的序列 ...

  8. selenium + python + firefox 测试环境的搭建与配置

    对于做UI自动化,如果是纯编写一段自动化测试程序,那么后续的维护成本会较高.这种情况下,借助 selenium 这款自动化系测试工具,辅助于自己编写部分脚本,将是个不错的选择.selenium 本身支 ...

  9. 微信小程序模板消息

    1 先去微信公众平台,选择现有模板,会有一个模板编号,模板中没有的关键词,可以申请新增. 微信公众平台直达:https://mp.weixin.qq.com 模板消息对应文档直达:https://de ...

  10. Maven项目下使用log4j

    Apache Log4j是一个基于Java的日志记录工具,它的日志级别按下面顺序递减: 级别 描述 OFF 最高级别,用于关闭日志记录. FATAL 将导致应用程序提前终止的严重错误的信息将立即呈现在 ...