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

來源:互聯網
上載者:User
摘要:在上一講中,我們完成了 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 中當所用工具資訊、當前比例尺和當前座標的顯示調用方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.