《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现
2010-11-26 11:24
225 查看
摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现。应用程序的状态栏一般用来显示程序的当前状态,当前所使用的工具。 GIS应用程序一般也在状态栏显示当前光标的坐标、比例尺等信息。学习完本讲内容,您将学会状态栏编程的基本方法,并且能够在我们的程序的状态栏中添加且显示以下信息:当前所用工具信息、当前比例尺、当前坐标。
教程目录:
[b]第一讲 桌面GIS应用程序框架的建立
第二讲 菜单的添加及其实现
第三讲 MapControl与PageLayoutControl同步
第四讲 状态栏信息的添加与实现
第五讲 鹰眼的实现
第六讲 右键菜单添加与实现
教程Bug及优化方案1
第七讲 图层符号选择器的实现1
第七讲 图层符号选择器的实现2
第八讲 属性数据表的查询显示
[/b]
------------------------------------------------------------------
在上一讲中,我们完成了 MapControl 和 PageLayoutControl 两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现。
应用程序的状态栏一般用来显示程序的当前状态,当前所使用的工具。 GIS 应用程序一般也在状态栏显示当前光标的坐标、比例尺等信息。
学习完本讲内容,您将学会状态栏编程的基本方法,并且能够在我们的程序的状态栏中添加且显示以下信息:
当前所用工具信息
当前比例尺
当前坐标
1、 添加状态栏项目
在设计视图中,点击窗体中的状态栏,在其属性面板中找到“ Items ”项,单击其右边的按钮,在下拉框中选择“ StatusLabel ”,单击“添加按钮”,依次添加四个 StatusLabel ,依次修改属性参数如下表所示:
设置好之后如下图所示:
Tips :
我们设计出的状态栏最终如下所示:
Spring 属性表示可以按状态栏剩余空间自动伸缩。所以加入 Blank 项目,只是为了占个位子,以达到 ScaleLabel 和 CoordinateLabel 项目右对齐而 MessageLabel 项目左对齐的目的。
2、 显示当前所用工具信息
首先添加 axToolbarControl1 的 OnMouseMove 事件 ( 相信大家看了以上的教程,已经知道怎么添加事件了吧,还不知道的建议再温习下前几讲的内容 ) 。在其事件响应函数代码如下:
3、 显示当前比例尺
添加 axMapControl1 的 OnMouseMove 事件,其代码如下:
4、 显示当前坐标
显示当前坐标也是 axMapControl1 的 OnMouseMove 事件中响应,故只要在 axMapControl1_OnMouseMove 函数中添加如下代码即可:
按F5 编译运行,可以看到,我们的程序已经能够正常工作了。但是细心的你可能会发现,当前坐标的后面的坐标单位为“ esriUnknownUnits”或“ esriMeters ”之类,即系统在正常单位的前面加上了“ esri ”,追求完美的我们自然看得不舒服。那就进行简单的替换吧。
首先定义个全局坐标单位变量 sMapUnits ,如下所示:
再 Form1_Load 函数中进行初始化:
添加 axMapControl1 控件的 OnMapReplaced 事件,在事件响应函数中进行坐标单位替换,代码如下:
5、 编译运行
按 F5 编译运行程序。如果你足够细心的话,相信你已经成功了!
在本讲中,介绍中 StatusStrip 控件的基本使用方法和 AE 中当所用工具信息、当前比例尺和当前坐标的显示调用方法。
教程目录:
[b]第一讲 桌面GIS应用程序框架的建立
第二讲 菜单的添加及其实现
第三讲 MapControl与PageLayoutControl同步
第四讲 状态栏信息的添加与实现
第五讲 鹰眼的实现
第六讲 右键菜单添加与实现
教程Bug及优化方案1
第七讲 图层符号选择器的实现1
第七讲 图层符号选择器的实现2
第八讲 属性数据表的查询显示
[/b]
------------------------------------------------------------------
在上一讲中,我们完成了 MapControl 和 PageLayoutControl 两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现。
应用程序的状态栏一般用来显示程序的当前状态,当前所使用的工具。 GIS 应用程序一般也在状态栏显示当前光标的坐标、比例尺等信息。
学习完本讲内容,您将学会状态栏编程的基本方法,并且能够在我们的程序的状态栏中添加且显示以下信息:
当前所用工具信息
当前比例尺
当前坐标
1、 添加状态栏项目
在设计视图中,点击窗体中的状态栏,在其属性面板中找到“ Items ”项,单击其右边的按钮,在下拉框中选择“ StatusLabel ”,单击“添加按钮”,依次添加四个 StatusLabel ,依次修改属性参数如下表所示:
序号 | Name 属性 | Text 属性 | Spring 属性 | 说明 |
1 | MessageLabel | 就绪 | False | 当前所用工具信息 |
2 | Blank | True | 占位 | |
3 | ScaleLabel | 比例尺 | False | 当前比例尺 |
4 | CoordinateLabel | 当前坐标 | False | 当前坐标 |
Tips :
我们设计出的状态栏最终如下所示:
就绪 | ( Blank ) | 比例尺 | 当前坐标 |
2、 显示当前所用工具信息
首先添加 axToolbarControl1 的 OnMouseMove 事件 ( 相信大家看了以上的教程,已经知道怎么添加事件了吧,还不知道的建议再温习下前几讲的内容 ) 。在其事件响应函数代码如下:
private void axToolbarControl1_OnMouseMove(object sender, IToolbarControlEvents_OnMouseMoveEvent e) { // 取得鼠标所在工具的索引号 int index = axToolbarControl1.HitTest(e.x, e.y, false); if (index != -1) { // 取得鼠标所在工具的 ToolbarItem IToolbarItem toolbarItem = axToolbarControl1.GetItem(index); // 设置状态栏信息 MessageLabel.Text = toolbarItem.Command.Message; } else { MessageLabel.Text = " 就绪 "; } } |
添加 axMapControl1 的 OnMouseMove 事件,其代码如下:
private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { // 显示当前比例尺 ScaleLabel.Text = " 比例尺 1:" + ((long)this.axMapControl1.MapScale).ToString(); } |
显示当前坐标也是 axMapControl1 的 OnMouseMove 事件中响应,故只要在 axMapControl1_OnMouseMove 函数中添加如下代码即可:
// 显示当前坐标 CoordinateLabel.Text = " 当前坐标 X = " + e.mapX.ToString() + " Y = " + e.mapY.ToString() + " " + this.axMapControl1.MapUnits; |
首先定义个全局坐标单位变量 sMapUnits ,如下所示:
private string sMapUnits; |
sMapUnits = "Unknown"; |
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) { esriUnits mapUnits = axMapControl1.MapUnits; switch (mapUnits) { case esriUnits.esriCentimeters: sMapUnits = "Centimeters"; break; case esriUnits.esriDecimalDegrees: sMapUnits = "Decimal Degrees"; break; case esriUnits.esriDecimeters: sMapUnits = "Decimeters"; break; case esriUnits.esriFeet: sMapUnits = "Feet"; break; case esriUnits.esriInches: sMapUnits = "Inches"; break; case esriUnits.esriKilometers: sMapUnits = "Kilometers"; break; case esriUnits.esriMeters: sMapUnits = "Meters"; break; case esriUnits.esriMiles: sMapUnits = "Miles"; break; case esriUnits.esriMillimeters: sMapUnits = "Millimeters"; break; case esriUnits.esriNauticalMiles: sMapUnits = "NauticalMiles"; break; case esriUnits.esriPoints: sMapUnits = "Points"; break; case esriUnits.esriUnknownUnits: sMapUnits = "Unknown"; break; case esriUnits.esriYards: sMapUnits = "Yards"; break; } } |
按 F5 编译运行程序。如果你足够细心的话,相信你已经成功了!
在本讲中,介绍中 StatusStrip 控件的基本使用方法和 AE 中当所用工具信息、当前比例尺和当前坐标的显示调用方法。
相关文章推荐
- 《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现
- Java web项目01 停车管理系统实现添加用户信息功能(四)
- java实现 二维码生成 并 添加 附加信息
- VS中实现为类自动添加 个人版本信息 的方法
- 熟悉IBatisNet的兄弟,探讨下 如何实现 动态添加SQL语句,查询出随时所需的信息
- C#实现为类和函数代码自动添加版权注释信息的方法
- SQLite数据库储存图片信息,GridView显示,基本实现添加、删除图标操作 ... ...
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定
- 调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加信息标注
- Java ckfinder2.6.2实现文件上传破解,获取文件信息添加到数据库中
- 百度地图开发实现点击地图添加Marker并获取地址信息
- <QT实现音乐播放器2> 添加音乐播放进度条与歌名作者信息
- C#实现邮件发送,可以添加附件,发件人、收件人信息从xml文件读取
- 怎样实现在一个页面中,给两张表添加信息,求大神赐教!
- 2.实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联
- 用jsp实现一个简单的购物车web应用系统。实现的添加购物商品,删除购物商品并且显示购物车信息。
- AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 【转】C# Winform打包部署时添加注册表信息实现开机启动