天天看點

《ArcGIS Engine+C#執行個體開發教程》第四講 狀态欄資訊的添加與實作

摘要:在上一講中,我們完成了 MapControl 和PageLayoutControl兩種視圖的同步工作,本講我們将完成狀态欄資訊的添加與實作。應用程式的狀态欄一般用來顯示程式的目前狀态,目前所使用的工具。 GIS應用程式一般也在狀态欄顯示目前光标的坐标、比例尺等資訊。學習完本講内容,您将學會狀态欄程式設計的基本方法,并且能夠在我們的程式的狀态欄中添加且顯示以下資訊:目前所用工具資訊、目前比例尺、目前坐标。

 教程目錄:

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888545.html">第一講 桌面GIS應用程式架構的建立</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888548.html">第二講 菜單的添加及其實作</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888551.html">第三講 MapControl與PageLayoutControl同步</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888553.html">第四講 狀态欄資訊的添加與實作</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888555.html">第五講 鷹眼的實作</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888557.html">第六講 右鍵菜單添加與實作</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888559.html">教程Bug及優化方案1</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888565.html">第七講 圖層符号選擇器的實作1</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888567.html">第七講 圖層符号選擇器的實作2</a>

<a href="http://www.cnblogs.com/SunYu/archive/2010/11/26/1888573.html">第八講 屬性資料表的查詢顯示</a>

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

在上一講中,我們完成了 MapControl 和 PageLayoutControl 兩種視圖的同步工作,本講我們将完成狀态欄資訊的添加與實作。

應用程式的狀态欄一般用來顯示程式的目前狀态,目前所使用的工具。 GIS 應用程式一般也在狀态欄顯示目前光标的坐标、比例尺等資訊。

學習完本講内容,您将學會狀态欄程式設計的基本方法,并且能夠在我們的程式的狀态欄中添加且顯示以下資訊:

目前所用工具資訊

目前比例尺

目前坐标

1、 添加狀态欄項目

在設計視圖中,點選窗體中的狀态欄,在其屬性面闆中找到“ Items ”項,單擊其右邊的按鈕,在下拉框中選擇“ StatusLabel ”,單擊“添加按鈕”,依次添加四個 StatusLabel ,依次修改屬性參數如下表所示:

序号

Name 屬性

Text 屬性

Spring 屬性

說明

1

MessageLabel

就緒

False

2

Blank

True

占位

3

ScaleLabel

比例尺

4

CoordinateLabel

設定好之後如下圖所示:

《ArcGIS Engine+C#執行個體開發教程》第四講 狀态欄資訊的添加與實作

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";

case esriUnits.esriDecimeters:

sMapUnits = "Decimeters";

case esriUnits.esriFeet:

sMapUnits = "Feet";

case esriUnits.esriInches:

sMapUnits = "Inches";

case esriUnits.esriKilometers:

sMapUnits = "Kilometers";

case esriUnits.esriMeters:

sMapUnits = "Meters";

case esriUnits.esriMiles:

sMapUnits = "Miles";

case esriUnits.esriMillimeters:

sMapUnits = "Millimeters";

case esriUnits.esriNauticalMiles:

sMapUnits = "NauticalMiles";

case esriUnits.esriPoints:

sMapUnits = "Points";

case esriUnits.esriUnknownUnits:

sMapUnits = "Unknown";

case esriUnits.esriYards:

sMapUnits = "Yards";

5、 編譯運作

按 F5 編譯運作程式。如果你足夠細心的話,相信你已經成功了!

在本講中,介紹中 StatusStrip 控件的基本使用方法和 AE 中當所用工具資訊、目前比例尺和目前坐标的顯示調用方法。