《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现

简介: 原文:《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现 摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现。
原文: 《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现

摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现。应用程序的状态栏一般用来显示程序的当前状态,当前所使用的工具。 GIS应用程序一般也在状态栏显示当前光标的坐标、比例尺等信息。学习完本讲内容,您将学会状态栏编程的基本方法,并且能够在我们的程序的状态栏中添加且显示以下信息:当前所用工具信息、当前比例尺、当前坐标。

 教程目录:

第一讲 桌面GIS应用程序框架的建立

第二讲 菜单的添加及其实现

第三讲 MapControl与PageLayoutControl同步

第四讲 状态栏信息的添加与实现

第五讲 鹰眼的实现

第六讲 右键菜单添加与实现

教程Bug及优化方案1

第七讲 图层符号选择器的实现1

第七讲 图层符号选择器的实现2

第八讲 属性数据表的查询显示

------------------------------------------------------------------

在上一讲中,我们完成了 MapControl 和 PageLayoutControl 两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现。

应用程序的状态栏一般用来显示程序的当前状态,当前所使用的工具。 GIS 应用程序一般也在状态栏显示当前光标的坐标、比例尺等信息。

学习完本讲内容,您将学会状态栏编程的基本方法,并且能够在我们的程序的状态栏中添加且显示以下信息:

  • 当前所用工具信息
  • 当前比例尺
  • 当前坐标

1、 添加状态栏项目

在设计视图中,点击窗体中的状态栏,在其属性面板中找到“ Items ”项,单击其右边的按钮,在下拉框中选择“ StatusLabel ”,单击“添加按钮”,依次添加四个 StatusLabel ,依次修改属性参数如下表所示:

序号

Name 属性

Text 属性

Spring 属性

说明

1

MessageLabel

就绪

False

当前所用工具信息

2

Blank


True

占位

3

ScaleLabel

比例尺

False

当前比例尺

4

CoordinateLabel

当前坐标

False

当前坐标

设置好之后如下图所示:

Tips

我们设计出的状态栏最终如下所示:

就绪

( Blank )

比例尺

当前坐标

Spring 属性表示可以按状态栏剩余空间自动伸缩。所以加入 Blank 项目,只是为了占个位子,以达到 ScaleLabel 和 CoordinateLabel 项目右对齐而 MessageLabel 项目左对齐的目的。

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 = " 就绪 ";

}

}

3、 显示当前比例尺

添加 axMapControl1 的 OnMouseMove 事件,其代码如下:

 

 private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)

{

// 显示当前比例尺

ScaleLabel.Text = " 比例尺 1:" + ((long)this.axMapControl1.MapScale).ToString();

}

4、 显示当前坐标

显示当前坐标也是 axMapControl1 的 OnMouseMove 事件中响应,故只要在 axMapControl1_OnMouseMove 函数中添加如下代码即可:

 

 // 显示当前坐标

CoordinateLabel.Text = " 当前坐标 X = " + e.mapX.ToString() + " Y = " + e.mapY.ToString() + " " + this.axMapControl1.MapUnits;

按F5 编译运行,可以看到,我们的程序已经能够正常工作了。但是细心的你可能会发现,当前坐标的后面的坐标单位为“ esriUnknownUnits”或“ esriMeters ”之类,即系统在正常单位的前面加上了“ esri ”,追求完美的我们自然看得不舒服。那就进行简单的替换吧。

首先定义个全局坐标单位变量 sMapUnits ,如下所示:

 

 private string sMapUnits;

再 Form1_Load 函数中进行初始化:

 

sMapUnits = "Unknown";  

添加 axMapControl1 控件的 OnMapReplaced 事件,在事件响应函数中进行坐标单位替换,代码如下:

 

 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;

}

}

5、 编译运行

按 F5 编译运行程序。如果你足够细心的话,相信你已经成功了!

在本讲中,介绍中 StatusStrip 控件的基本使用方法和 AE 中当所用工具信息、当前比例尺和当前坐标的显示调用方法。

目录
相关文章
|
9月前
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
191 1
|
9月前
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
158 2
|
9月前
|
C#
C# DataTable不能通过已删除的行访问该行的信息
C# DataTable不能通过已删除的行访问该行的信息
|
7月前
|
BI 数据处理
一体化的医学实验室信息系统源码,C#LIS系统源码
面向医学实验室的一体化平台提供标本流程管理、报告发布及科室管理支持。它与HIS无缝对接,简化患者信息录入,实现检验结果实时同步。系统自动处理数据、分类样本、计算参考范围,并对异常结果预警。条码管理简化样本追踪,质控管理提升检测准确性。平台还支持数据审核发布、历史结果查询对比、灵活报表打印及统计分析等功能,辅助科室管理和试剂库存控制,加强科室间沟通协作。
一体化的医学实验室信息系统源码,C#LIS系统源码
|
8月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
94 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
6月前
|
存储 搜索推荐 C#
WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中
WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中
62 0
|
7月前
|
数据采集 监控 BI
C#实验室检验LIS信息系统源码 微生物检验、质控维护
LIS系统的主要目标是为检验室开展检验工作提供更加有效的系统支持。该系统将尽量减少以人工操作的方式来实现信息转移,减少在接收检验项目、报告结果和保存记录等工作中可能会出现的人为误差,为检验结果查询提供更有效的方法,节省了管理信息所需的琐碎时间和精力。为实验室技术人员提供智能化的运行模式,使处理诸如按照规程审核检验结果、取消检验项目、分析、处理存在重大疑问的检验结果、执行特殊的命令和处理质量控制等问题更轻松自如,这将使检验人员更快地获得准确清晰的检验结果。为临床医护人员提供在线设施,使他们可以及时准确地获得相关实验室信息。确保检验结果的可靠性和准确性,利用实验室管理信息系统的仪器监控和质量控制,
67 0
|
存储 C# C++
Baumer工业相机堡盟相机做寄存器进行读写保存字符串信息(C++/C#)
Baumer工业相机堡盟相机做寄存器进行读写保存字符串信息(C++/C#)
118 0
|
9月前
|
传感器 API 开发工具
Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等(C#)
78 1
|
9月前
|
数据管理 BI 项目管理
C#实验室检验科LIS信息系统源码
医院设备信息维护是针对医院实际存在的检验设备,每台接入LIS系统的设备单独对应一条设备信息。
94 1