摘要:在上一講中,我們完成了 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
設定好之後如下圖所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauITYkZmM4MzNmNjNhNTZyMGZ4gTY0UDMmhTM1MGNmVDNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
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 中當所用工具資訊、目前比例尺和目前坐标的顯示調用方法。