28
Nguyễn Hoàng Minh ---------------------------------------------------------------------------------------------------------------------- Xây dựng ứng dụng ArcGIS Engine Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows với các điều khiển Windows ------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------- Chương này dành cho những nhà lập trình muốn xây dựng và triển khai một Chương này dành cho những nhà lập trình muốn xây dựng và triển khai một ứng dụng sử dụng .NET. Nó miêu tả quá trình xây dựng và triển khai một ứng dụng ứng dụng sử dụng .NET. Nó miêu tả quá trình xây dựng và triển khai một ứng dụng sủe dụng Các điều khiển ArcGIS. sủe dụng Các điều khiển ArcGIS. Miêu tả dự án. Miêu tả dự án. Mục đích của việc xây dựng các ứng dụng với Window Control là giúp bạn Mục đích của việc xây dựng các ứng dụng với Window Control là giúp bạn quen thuộc với các bước cần thiết để phát triển và triển khai một ứng dụng Web sử quen thuộc với các bước cần thiết để phát triển và triển khai một ứng dụng Web sử dụng các điều khiển ArcGIS tiêu chuẩn bên trong VS .NET API. ví dụ này sử dụng dụng các điều khiển ArcGIS tiêu chuẩn bên trong VS .NET API. ví dụ này sử dụng các điều khiển MapControl, PageLayoutControl, T các điều khiển MapControl, PageLayoutControl, T - - 1 -Chủ đề:OC Control và -Chủ đề:OC Control và ToolbarControl như là những điều khiển của Windows bên trong môi trường .NET. ToolbarControl như là những điều khiển của Windows bên trong môi trường .NET. cac nhà lập trình COM, Java, và C++ nên tập trung vào các ví dụ sau: Xây dựng các cac nhà lập trình COM, Java, và C++ nên tập trung vào các ví dụ sau: Xây dựng các ứng dụng với ActiveX, xây dựng các ứng dụng với visual JavaBeans,... ứng dụng với ActiveX, xây dựng các ứng dụng với visual JavaBeans,... Ví dụ này cung cấp các bước cần thiết để tạo ra một ứng dụng GIS cho việc xem các Ví dụ này cung cấp các bước cần thiết để tạo ra một ứng dụng GIS cho việc xem các tài liệu bản đồ được tạo ra từ trước sử dụng ArcMap - một ứng dụng ArcGIS tài liệu bản đồ được tạo ra từ trước sử dụng ArcMap - một ứng dụng ArcGIS Desktop: Desktop: + Nạp và nhúng các điều khiển ArcGIS Control trong .NET. + Nạp và nhúng các điều khiển ArcGIS Control trong .NET. + Nạp tài liệu đã được tạo ra từ trước trong MapControl và + Nạp tài liệu đã được tạo ra từ trước trong MapControl và PageLayoutControl. PageLayoutControl. + Thiết đặt các điều khiển ToolbarControl và TOCControl. + Thiết đặt các điều khiển ToolbarControl và TOCControl. + Điều khiển việc thay đổi kích cỡ form. + Điều khiển việc thay đổi kích cỡ form. + Thêm các lệnh và các công cụ ArcGIS Engine cho ToolbarControl. + Thêm các lệnh và các công cụ ArcGIS Engine cho ToolbarControl. + Tạo ra các thanh công cụ xổ xuống. + Tạo ra các thanh công cụ xổ xuống. + Quản lý việc chỉnh sửa nhãn trong TOCControl. + Quản lý việc chỉnh sửa nhãn trong TOCControl. + Vẽ các hình khối trong MapControl. + Vẽ các hình khối trong MapControl. + Tạo ra một công cụ người dùng để làm việc với MapControl, Tạo ra một công cụ người dùng để làm việc với MapControl, PageLayoutControl và PageLayoutControl và ToolbarControl. ToolbarControl. + Triển khai ứng dụng trong hệ điều hành Win. + Triển khai ứng dụng trong hệ điều hành Win. Nội dung Nội dung. Ví dụ này được thực thi trong môi trường .NET và sử dụng các thành phần Ví dụ này được thực thi trong môi trường .NET và sử dụng các thành phần ESRI để chứa ArcGIS bên trong các điều khiển Windows. Các thành phần ESRI này ESRI để chứa ArcGIS bên trong các điều khiển Windows. Các thành phần ESRI này hoạt động như một cầu nối giữa mã không được quản lý (unmanaged code) của hoạt động như một cầu nối giữa mã không được quản lý (unmanaged code) của COM và các COM và các các mã .NET được quản lý.Bất cứ tham chiếu nào tới các thành viên của các mã .NET được quản lý.Bất cứ tham chiếu nào tới các thành viên của các điều khiển ArcGIS COM đều được hướng toiứ đối tượng COM thực sự. Tương các điều khiển ArcGIS COM đều được hướng toiứ đối tượng COM thực sự. Tương tự như vậy, những phản hồi tự đối tượng COM cũng được đưa qua các thành phần có tự như vậy, những phản hồi tự đối tượng COM cũng được đưa qua các thành phần có thể tích hợp ESRI rồi đưa tới ứng dụng .NET. Mỗi điều khiển ArcGIS Engine đều có thể tích hợp ESRI rồi đưa tới ứng dụng .NET. Mỗi điều khiển ArcGIS Engine đều có các sự kiện, thuộc tính và phương thức có thể được truy nhập khi được nhúng bên các sự kiện, thuộc tính và phương thức có thể được truy nhập khi được nhúng bên trong .NET form. Các đối tựong và chức năng bên trong mỗi điều khiển có thể được trong .NET form. Các đối tựong và chức năng bên trong mỗi điều khiển có thể được ----------------------------------------------------------------------------------------------------------------- Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows 1

Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Embed Size (px)

DESCRIPTION

Book

Citation preview

Page 1: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

Xây dựng ứng dụng ArcGIS Engine Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows với các điều khiển Windows--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Chương này dành cho những nhà lập trình muốn xây dựng và triển khai mộtChương này dành cho những nhà lập trình muốn xây dựng và triển khai một ứng dụng sử dụng .NET. Nó miêu tả quá trình xây dựng và triển khai một ứng dụngứng dụng sử dụng .NET. Nó miêu tả quá trình xây dựng và triển khai một ứng dụng sủe dụng Các điều khiển ArcGIS.sủe dụng Các điều khiển ArcGIS.Miêu tả dự án.Miêu tả dự án. Mục đích của việc xây dựng các ứng dụng với Window Control là giúp bạnMục đích của việc xây dựng các ứng dụng với Window Control là giúp bạn quen thuộc với các bước cần thiết để phát triển và triển khai một ứng dụng Web sửquen thuộc với các bước cần thiết để phát triển và triển khai một ứng dụng Web sử dụng các điều khiển ArcGIS tiêu chuẩn bên trong VS .NET API. ví dụ này sử dụngdụng các điều khiển ArcGIS tiêu chuẩn bên trong VS .NET API. ví dụ này sử dụng các điều khiển MapControl, PageLayoutControl, Tcác điều khiển MapControl, PageLayoutControl, T - - 11 -Chu đê:OC Control và -Chu đê:OC Control và ToolbarControl như là những điều khiển của Windows bên trong môi trường .NET.ToolbarControl như là những điều khiển của Windows bên trong môi trường .NET. cac nhà lập trình COM, Java, và C++ nên tập trung vào các ví dụ sau: Xây dựng cáccac nhà lập trình COM, Java, và C++ nên tập trung vào các ví dụ sau: Xây dựng các ứng dụng với ActiveX, xây dựng các ứng dụng với visual JavaBeans,...ứng dụng với ActiveX, xây dựng các ứng dụng với visual JavaBeans,...Ví dụ này cung cấp các bước cần thiết để tạo ra một ứng dụng GIS cho việc xem cácVí dụ này cung cấp các bước cần thiết để tạo ra một ứng dụng GIS cho việc xem các tài liệu bản đồ được tạo ra từ trước sử dụng ArcMap - một ứng dụng ArcGIStài liệu bản đồ được tạo ra từ trước sử dụng ArcMap - một ứng dụng ArcGIS Desktop:Desktop:

+ Nạp và nhúng các điều khiển ArcGIS Control trong .NET.+ Nạp và nhúng các điều khiển ArcGIS Control trong .NET.+ Nạp tài liệu đã được tạo ra từ trước trong MapControl và+ Nạp tài liệu đã được tạo ra từ trước trong MapControl và PageLayoutControl.PageLayoutControl.

+ Thiết đặt các điều khiển ToolbarControl và TOCControl.+ Thiết đặt các điều khiển ToolbarControl và TOCControl.+ Điều khiển việc thay đổi kích cỡ form.+ Điều khiển việc thay đổi kích cỡ form.+ Thêm các lệnh và các công cụ ArcGIS Engine cho ToolbarControl.+ Thêm các lệnh và các công cụ ArcGIS Engine cho ToolbarControl.+ Tạo ra các thanh công cụ xổ xuống.+ Tạo ra các thanh công cụ xổ xuống.+ Quản lý việc chỉnh sửa nhãn trong TOCControl.+ Quản lý việc chỉnh sửa nhãn trong TOCControl.+ Vẽ các hình khối trong MapControl.+ Vẽ các hình khối trong MapControl.++ Tạo ra một công cụ người dùng để làm việc với MapControl,Tạo ra một công cụ người dùng để làm việc với MapControl,

PageLayoutControl vàPageLayoutControl và ToolbarControl.ToolbarControl.+ Triển khai ứng dụng trong hệ điều hành Win.+ Triển khai ứng dụng trong hệ điều hành Win.

Nội dungNội dung..Ví dụ này được thực thi trong môi trường .NET và sử dụng các thành phầnVí dụ này được thực thi trong môi trường .NET và sử dụng các thành phần

ESRI để chứa ArcGIS bên trong các điều khiển Windows. Các thành phần ESRI nàyESRI để chứa ArcGIS bên trong các điều khiển Windows. Các thành phần ESRI này hoạt động như một cầu nối giữa mã không được quản lý (unmanaged code) củahoạt động như một cầu nối giữa mã không được quản lý (unmanaged code) của COM và cácCOM và các các mã .NET được quản lý.Bất cứ tham chiếu nào tới các thành viên của các mã .NET được quản lý.Bất cứ tham chiếu nào tới các thành viên của các điều khiển ArcGIS COM đều được hướng toiứ đối tượng COM thực sự. Tươngcác điều khiển ArcGIS COM đều được hướng toiứ đối tượng COM thực sự. Tương tự như vậy, những phản hồi tự đối tượng COM cũng được đưa qua các thành phần cótự như vậy, những phản hồi tự đối tượng COM cũng được đưa qua các thành phần có thể tích hợp ESRI rồi đưa tới ứng dụng .NET. Mỗi điều khiển ArcGIS Engine đều cóthể tích hợp ESRI rồi đưa tới ứng dụng .NET. Mỗi điều khiển ArcGIS Engine đều có các sự kiện, thuộc tính và phương thức có thể được truy nhập khi được nhúng bêncác sự kiện, thuộc tính và phương thức có thể được truy nhập khi được nhúng bên trong .NET form. Các đối tựong và chức năng bên trong mỗi điều khiển có thể đượctrong .NET form. Các đối tựong và chức năng bên trong mỗi điều khiển có thể được

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

1

Page 2: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

kết hợp với các điều khiển ESRI và điều khiển tự tạo khác để tạo ra ứng dụng cuốikết hợp với các điều khiển ESRI và điều khiển tự tạo khác để tạo ra ứng dụng cuối cùng phía người dùng.cùng phía người dùng.

Ví dụ này được viết bởi cả CSharp và VisualBasic.NET, mặc dù quá trình thựcVí dụ này được viết bởi cả CSharp và VisualBasic.NET, mặc dù quá trình thực thi sau đó tập trung vào các ví dụ CSharp. Nhiều nhà lập trình sẽ cảm thấy thoải máithi sau đó tập trung vào các ví dụ CSharp. Nhiều nhà lập trình sẽ cảm thấy thoải mái hơn với VB.NET, trong khi cấu trúc của ngôn ngữ lập trình CSharp sẽ quen thuộchơn với VB.NET, trong khi cấu trúc của ngôn ngữ lập trình CSharp sẽ quen thuộc hơn với những nhà lập trình Java và C++. Dù môi trường lập trình thế nào đi nữa,hơn với những nhà lập trình Java và C++. Dù môi trường lập trình thế nào đi nữa, bạn sẽ thành công với các điều khiển ArcGIS phụ thuộc vào kỹ năng trong trong môibạn sẽ thành công với các điều khiển ArcGIS phụ thuộc vào kỹ năng trong trong môi trường lập trình và ArcObjects.trường lập trình và ArcObjects.

MapControl, PageLayoutControl,TOCControl và ToolbarControl được sửMapControl, PageLayoutControl,TOCControl và ToolbarControl được sử dụng trong ví dụ này để cung cấp giao diện lập trình ứng dụng cho người sử dụng.Cádụng trong ví dụ này để cung cấp giao diện lập trình ứng dụng cho người sử dụng.Cá điều khiển ArcGIS này được sử dụng làm cầu nối trung gian giữa các ArcObjectsđiều khiển ArcGIS này được sử dụng làm cầu nối trung gian giữa các ArcObjects khác và ác câu lệnh ArcGIS Engine để tạo ra một ứng dụng hiển thị thông tin địa lý.khác và ác câu lệnh ArcGIS Engine để tạo ra một ứng dụng hiển thị thông tin địa lý.Thiết kếThiết kế.. Ứng dụng này được thiết kế trước hết để làm nổi bật vấn đề các điều khiểnỨng dụng này được thiết kế trước hết để làm nổi bật vấn đề các điều khiển ArcGIS sẽ tương tác với nhau như thế nào, và thứ hai để biểu diễn một vài kiểu đóiArcGIS sẽ tương tác với nhau như thế nào, và thứ hai để biểu diễn một vài kiểu đói tượng điều khiển ArcGIS cho người lập trình.tượng điều khiển ArcGIS cho người lập trình.

Mỗi điều khiển ArcGIS .NET có một bộ các thuộc tính có thể truy nhập khiMỗi điều khiển ArcGIS .NET có một bộ các thuộc tính có thể truy nhập khi điều khiển được nhúng trong môi trường .NET. Những trang thuộc tính này cung cấpđiều khiển được nhúng trong môi trường .NET. Những trang thuộc tính này cung cấp những con đường ngắn nhất cho việc thiết đặt các thuộc tính và phương thức củanhững con đường ngắn nhất cho việc thiết đặt các thuộc tính và phương thức của điều khiển, và cho phép nhà lập trình xây dựng ứng dụng mà không phải viết code.điều khiển, và cho phép nhà lập trình xây dựng ứng dụng mà không phải viết code. Ứng dụng này không sử dụng các trang thuộc tính, mà xây dựng ứng dụng thuần nhấtỨng dụng này không sử dụng các trang thuộc tính, mà xây dựng ứng dụng thuần nhất là lập trình. Muốn tìm hiểu them những thông tin về các trang thuộc tính, hãy đọclà lập trình. Muốn tìm hiểu them những thông tin về các trang thuộc tính, hãy đọc ArcGIS Developer Help.ArcGIS Developer Help.

Những thành phầnNhững thành phần cần thiết. cần thiết.

•• Cài đặt ArcGIS Engine Developer Kit và các file bản quyền.Cài đặt ArcGIS Engine Developer Kit và các file bản quyền.•• Cài đặt .NET 2003, .NET Framework 1.1 và bản quyền thích hợp.Cài đặt .NET 2003, .NET Framework 1.1 và bản quyền thích hợp.• Người lập trình phải quen thuộc với hệ điều hành Windows và kiến thức làmNgười lập trình phải quen thuộc với hệ điều hành Windows và kiến thức làm

việc với .NET, hoặc với CSharp hoặc với VB.NET. Ví dụ này cung cấp một sốviệc với .NET, hoặc với CSharp hoặc với VB.NET. Ví dụ này cung cấp một số thông tin về cách sử dụng các điều khiển ArcGIS trong .NET,chứ nó khôngthông tin về cách sử dụng các điều khiển ArcGIS trong .NET,chứ nó không phải là sự thay thế cho việc thực hành trong môi trường lập trình.phải là sự thay thế cho việc thực hành trong môi trường lập trình.

•• Kiến thức cơ bản về ArcObjects và ứng dụng ArcGIS, chẳng hạn ArcMap vàKiến thức cơ bản về ArcObjects và ứng dụng ArcGIS, chẳng hạn ArcMap và ArcCatalog,trong khi đó không cần phải nắm sâu lắm về các phần mềm ESRIArcCatalog,trong khi đó không cần phải nắm sâu lắm về các phần mềm ESRI khác.khác.

• Ví dụ này có trong đường dẫn:Ví dụ này có trong đường dẫn: <install_location>\DeveloperKit\Samples\Developer_Guide_Scenarios\ArcGI<install_location>\DeveloperKit\Samples\Developer_Guide_Scenarios\ArcGIS_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer.S_Engine\Building_an_ArcGIS_Control_Application\Map_Viewer.

•• Các điều khiển và thư viện sử dụng trong ví dụ này bao gồm:Các điều khiển và thư viện sử dụng trong ví dụ này bao gồm:• AxMapControl • AxMapControl • AxTOCControl• AxTOCControl• AxPageLayoutControl • AxPageLayoutControl • AxToolbarControl• AxToolbarControl• ESRI.ArcGIS.Carto • ESRI.ArcGIS.Carto • ESRI.ArcGIS.System• ESRI.ArcGIS.System

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

2

Page 3: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

• ESRI.ArcGIS.Display • ESRI.ArcGIS.Display • ESRI.ArcGIS.SystemUI• ESRI.ArcGIS.SystemUI• ESRI.ArcGIS.Geometry • ESRI.ArcGIS.Geometry • ESRI.ArcGIS.Utility• ESRI.ArcGIS.Utility• esriMapControl • esriMapControl • esriTOCControl• esriTOCControl• esriPageLayoutControl • esriPageLayoutControl • esriToolbarControl• esriToolbarControl

Thực thi ứng dụngThực thi ứng dụng: : Nạp các điều khiển ArcGISNạp các điều khiển ArcGIS: :

Trước khi bặt đầu lập trình ứng dụng, các điều khiển ArcGIS và các thamTrước khi bặt đầu lập trình ứng dụng, các điều khiển ArcGIS và các tham chiếu thư viện ArcGIS Engine khác mà ứng dụng sử dụng phai được nạp trongchiếu thư viện ArcGIS Engine khác mà ứng dụng sử dụng phai được nạp trong môi trường ứng dụng.môi trường ứng dụng.

1.1. Khởi động VS.NET và tạo một ứng dụng Windows Application của C# từKhởi động VS.NET và tạo một ứng dụng Windows Application của C# từ hộp thoại New project.hộp thoại New project.

2.2. Đặt tên ứng dụng là “Controls”, và duyệt vị trí để save ứng dụng.Đặt tên ứng dụng là “Controls”, và duyệt vị trí để save ứng dụng.3.3. Bấm chuột phải vào tab Windows Form của thanh công cụ và chọn Add/Bấm chuột phải vào tab Windows Form của thanh công cụ và chọn Add/

Remove Items… từ menu ngữ cảnh.Remove Items… từ menu ngữ cảnh.4.4. Trong hộp thoại Customize Toolbox, chọn .NET Framework và check vàoTrong hộp thoại Customize Toolbox, chọn .NET Framework và check vào

‘AxMapControl’, ‘AxPageLayoutControl’,và ‘AxTOCControl’. Chọn OK.‘AxMapControl’, ‘AxPageLayoutControl’,và ‘AxTOCControl’. Chọn OK. Các điều khiển này giờ đây xuất hiện trong tab Windows Forms của thanhCác điều khiển này giờ đây xuất hiện trong tab Windows Forms của thanh công cụ.công cụ.

5.Chọn Project trên thanh menu rồi chọn Add Reference… 5.Chọn Project trên thanh menu rồi chọn Add Reference… 6.Trong hộp thoại Add Reference, nháy đúp vào ESRI.ArcGIS.Carto,6.Trong hộp thoại Add Reference, nháy đúp vào ESRI.ArcGIS.Carto, ESRI.ArcGIS.Display, ESRI.ArcGIS.Geometry, ESRI.ArcGIS.System,ESRI.ArcGIS.Display, ESRI.ArcGIS.Geometry, ESRI.ArcGIS.System, ESRI.ArcGIS.SystemUI, ESRI.ArcGIS.Utility rồi chọn OK.ESRI.ArcGIS.SystemUI, ESRI.ArcGIS.Utility rồi chọn OK.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

3

Page 4: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

Nhúng các điều Nhúng các điều khiển ArcGIS trong một container.khiển ArcGIS trong một container.

Trước khi bạn có thể truy cập các thuộc tính, phương thức cũng như các sựTrước khi bạn có thể truy cập các thuộc tính, phương thức cũng như các sự kiện của các điều khiển, mỗi điều khiển cần được nhúng bên trong một nơikiện của các điều khiển, mỗi điều khiển cần được nhúng bên trong một nơi chứa trong .NET. Khi các điều khiển được nhúng bên trong form, chúng sẽchứa trong .NET. Khi các điều khiển được nhúng bên trong form, chúng sẽ xuất hiện trong giao diện lập trình người sử dụng của ứng dụng.xuất hiện trong giao diện lập trình người sử dụng của ứng dụng.

1.1. Mở .NET Form Mở .NET Form 2.2. Kích đúp vào AxMapControl trong Windows Forms tab của thanh công cụKích đúp vào AxMapControl trong Windows Forms tab của thanh công cụ

để them một MapControl trên form.để them một MapControl trên form.3.3. Lặp lại thao tác này với AxPageLayoutControl, AxTOCControl vàLặp lại thao tác này với AxPageLayoutControl, AxTOCControl và

AxToolbarControl.AxToolbarControl.4.4. Thay đổi kích thước và thay đổi vị trí của các điều khiển trên form như sau:Thay đổi kích thước và thay đổi vị trí của các điều khiển trên form như sau:

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

4

Page 5: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

5.Kích đúp vào form để hiển thị code của form. Sử dụng các directives5.Kích đúp vào form để hiển thị code của form. Sử dụng các directives sau tại vị trí trên cùng của đoạn mã:sau tại vị trí trên cùng của đoạn mã:

using System;using System;using System.Windows.Forms;using System.Windows.Forms;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.esriSystem;using esriToolbarControl;using esriToolbarControl;using esriTOCControl;using esriTOCControl;

Nạp các tài liệu Map trong PageLayoutControl và MapControlNạp các tài liệu Map trong PageLayoutControl và MapControl

Các lớp dữ liệu và các tài liệu riêng biệt được tạo từ trước mà sử dụngCác lớp dữ liệu và các tài liệu riêng biệt được tạo từ trước mà sử dụng ArcMap- một ứng dụng ArcGIS Desktop, có thể được nạp trong điều khiểnArcMap- một ứng dụng ArcGIS Desktop, có thể được nạp trong điều khiển MapControl và PageLayoutControl.Bạn có thể nạp bản đồ theo ví dụ hoặc nạpMapControl và PageLayoutControl.Bạn có thể nạp bản đồ theo ví dụ hoặc nạp một bản đồ bất kỳ theo sở thích cá nhân.một bản đồ bất kỳ theo sở thích cá nhân.

1.Chọn sự kiện Form_Load và nạp dòng code sau (nếu bạn sử dụng bản1.Chọn sự kiện Form_Load và nạp dòng code sau (nếu bạn sử dụng bản đồ riêng thì phải thay thế tên file bản đồ chính xác)đồ riêng thì phải thay thế tên file bản đồ chính xác)

private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{////Nạp bản đồ đã được tạo từ trước trong PageLayoutControl sử dụng các đường dẫn quanNạp bản đồ đã được tạo từ trước trong PageLayoutControl sử dụng các đường dẫn quan hệ. hệ. string fileName =string fileName =

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

5

Page 6: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

@"..\..\..\..\..\..\..\..\Data\\ArcGIS_Engine_Developer_Guide\Gulf of St.@"..\..\..\..\..\..\..\..\Data\\ArcGIS_Engine_Developer_Guide\Gulf of St.Lawrence.mxd";Lawrence.mxd";if (axPageLayoutControl1.CheckMxFile(fileName))if (axPageLayoutControl1.CheckMxFile(fileName)){{axPageLayoutControl1.LoadMxFile(fileName,"");axPageLayoutControl1.LoadMxFile(fileName,"");}}}}

2.Hiển thị form và chọn axPageLayoutControl1 từ cửa sổ thuộc tính và2.Hiển thị form và chọn axPageLayoutControl1 từ cửa sổ thuộc tính và hiển thị các sự kiện của axLayoutControl. Kích đúp vào sự kiệnhiển thị các sự kiện của axLayoutControl. Kích đúp vào sự kiện OnPageLayoutReplace để thêm phương thức xử lý sự kiện.OnPageLayoutReplace để thêm phương thức xử lý sự kiện.

3. Trong sự kiện axPageLayoutControl_ OnPageLayoutReplace thêm vào3. Trong sự kiện axPageLayoutControl_ OnPageLayoutReplace thêm vào dòng code sau để nạp bản đồ tương tự vào MapControl. dòng code sau để nạp bản đồ tương tự vào MapControl.

private void axPageLayoutControl1_OnPageLayoutReplaced(object sender,private void axPageLayoutControl1_OnPageLayoutReplaced(object sender,ESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnPageLayoutReplacedEventESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnPageLayoutReplacedEvente)e){{//Nạp cùng tài liệu bản đồ trong MapControl//Nạp cùng tài liệu bản đồ trong MapControlaxMapControl1.LoadMxFile(axPageLayoutControl1.DocuaxMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename,null,mentFilename,null,null);null);//Đặt sự mở rộng của điều khiển MapControl tùy theo kích cỡ thực của ảnh//Đặt sự mở rộng của điều khiển MapControl tùy theo kích cỡ thực của ảnh

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

6

Page 7: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

axMapControl1.Extent = axMapControl1.FullExtent;axMapControl1.Extent = axMapControl1.FullExtent;} }

Thiết đặt TOCControl và ToolbarControlThiết đặt TOCControl và ToolbarControl

TOCControl và ToolbarControl làm việc như là cầu nối vớiTOCControl và ToolbarControl làm việc như là cầu nối với PageLayoutControl chứ không phải là với MapControl. Để làm được như thế,PageLayoutControl chứ không phải là với MapControl. Để làm được như thế, PageLayoutControl phải được thiết đặt là buddy control. TOCControl sử dụngPageLayoutControl phải được thiết đặt là buddy control. TOCControl sử dụng ActiveView của buddy để chứa bản đồ, các lớp và các biểu tượng, trong khi bất cứActiveView của buddy để chứa bản đồ, các lớp và các biểu tượng, trong khi bất cứ câu lệnh, công cụ hoặc các menu items trên ToolbarControl sẽ tương tác với sự hiểncâu lệnh, công cụ hoặc các menu items trên ToolbarControl sẽ tương tác với sự hiển thị của buddy control.thị của buddy control.

1.Trong sự kiện Form_Load nhập vào những dòng code sau :1.Trong sự kiện Form_Load nhập vào những dòng code sau :

private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{//Nạp bản đồ đã được tạo từ trước trong PageLayoutControl sử dụng các đường dẫn quan hệ.//Nạp bản đồ đã được tạo từ trước trong PageLayoutControl sử dụng các đường dẫn quan hệ.string fileName =@"..\..\..\..\..\..\..\..\Data\\ArcGIS_Engine_Developer_Guide\Gulf ofstring fileName =@"..\..\..\..\..\..\..\..\Data\\ArcGIS_Engine_Developer_Guide\Gulf of St.Lawrence.mxd";St.Lawrence.mxd";if (axPageLayoutControl1.CheckMxFile(fileName))if (axPageLayoutControl1.CheckMxFile(fileName)){{axPageLayoutControl1.LoadMxFile(fileName,"");axPageLayoutControl1.LoadMxFile(fileName,"");}}//Thiết đặt các điều khiển//Thiết đặt các điều khiển buddy. buddy.axTOCControl1.SetBuddyControl(axPageLayoutControl1);axTOCControl1.SetBuddyControl(axPageLayoutControl1);axToolbarControl1.SetBuddyControl(axPageLayoutControl1);axToolbarControl1.SetBuddyControl(axPageLayoutControl1);}}

2. Xây dựng và chạy ứng dụng. Bản đồ sẽ được nạp trong PageLayoutControl2. Xây dựng và chạy ứng dụng. Bản đồ sẽ được nạp trong PageLayoutControl và TOCControl sẽ thống kê các lóp dữ liệu trong bản đồ đó. Sử dụng TOCControl đểvà TOCControl sẽ thống kê các lóp dữ liệu trong bản đồ đó. Sử dụng TOCControl để thiết đặt các lớp ẩn hay hiện bằng cách check hay uncheck vào các hộp. Theo mặcthiết đặt các lớp ẩn hay hiện bằng cách check hay uncheck vào các hộp. Theo mặc định, tiêu điểm bản đồ sẽ được nạp vào MapControl. Tại thời điểm này,định, tiêu điểm bản đồ sẽ được nạp vào MapControl. Tại thời điểm này, toolbarControl sẽ trống bởi không có câu lệnh nào được add vào. Thử thay đổi kíchtoolbarControl sẽ trống bởi không có câu lệnh nào được add vào. Thử thay đổi kích cỡ của form, và chú ý rằng các điều khiển đó không thay đổi kích cỡ.cỡ của form, và chú ý rằng các điều khiển đó không thay đổi kích cỡ.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

7

Page 8: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

Điều khiển form thay đổi kích cỡĐiều khiển form thay đổi kích cỡ

Khi form thay đổi kích cỡ tại thời điểm chương trình đang chạy,Khi form thay đổi kích cỡ tại thời điểm chương trình đang chạy, PageLayoutControl và MapControl không tự động thay đổi kích cỡ theo form. ĐểPageLayoutControl và MapControl không tự động thay đổi kích cỡ theo form. Để thay đổi kích cỡ các control này để chúng luôn có thể kéo dài lấp đầy form, bạn phảithay đổi kích cỡ các control này để chúng luôn có thể kéo dài lấp đầy form, bạn phải cố định (anchor) các điều khiển vào form. Nếu PageLayoutControl và MapControlcố định (anchor) các điều khiển vào form. Nếu PageLayoutControl và MapControl chứa nhiều dữ liệu thì redraw (nạp lại) dữ liệu đó khi sự kiện Form_Resize xảy ra.chứa nhiều dữ liệu thì redraw (nạp lại) dữ liệu đó khi sự kiện Form_Resize xảy ra. Để tăng hiệu quả thực thi, bạn có thể ngăn cản dữ liệu redraw (nạp lại) cho đến khiĐể tăng hiệu quả thực thi, bạn có thể ngăn cản dữ liệu redraw (nạp lại) cho đến khi quá trình thay đổi kích cỡ kết thúc. Trong quá trình thay đổi kích cỡ, chỉ có mộtquá trình thay đổi kích cỡ kết thúc. Trong quá trình thay đổi kích cỡ, chỉ có một bitmap được vẽ lại mà thôi.bitmap được vẽ lại mà thôi.

1. Hiển thj form và chon axPageLayoutControl1 từ cửa sổ thuộc tính. Chọn thuộcHiển thj form và chon axPageLayoutControl1 từ cửa sổ thuộc tính. Chọn thuộc tính và cố định axPageLayoutControl với lề trên, dưới, trái,phải của form.tính và cố định axPageLayoutControl với lề trên, dưới, trái,phải của form.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

8

Page 9: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

2.2. Cố định axMapcontrol với lề trên, dưới và trái của form.Cố định axMapcontrol với lề trên, dưới và trái của form.

3.Thêm dòng code sau vào đầu sự kiện Form_Load:3.Thêm dòng code sau vào đầu sự kiện Form_Load:

private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{//Ngăn cản việc vẽ lại trong khi thay đổi kích cỡ form.//Ngăn cản việc vẽ lại trong khi thay đổi kích cỡ form.this.SetStyle(ControlStyles.EnableNotifyMessage,true);this.SetStyle(ControlStyles.EnableNotifyMessage,true);}}

4.Khai báo các hằng số sau:4.Khai báo các hằng số sau:

public class Form1 : System.Windows.Forms.Formpublic class Form1 : System.Windows.Forms.Form{{……private const int WM_ENTERSIZEMOVE = 0x231;private const int WM_ENTERSIZEMOVE = 0x231;private const int WM_EXITSIZEMOVE = 0x232;private const int WM_EXITSIZEMOVE = 0x232;……

5.Thêm các dòng code sau để nạp chồng phương thức OnNotifyMessage5.Thêm các dòng code sau để nạp chồng phương thức OnNotifyMessage

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

9

Page 10: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

protected override void OnNotifyMessage(System.Windows.Forms.Message m)protected override void OnNotifyMessage(System.Windows.Forms.Message m){{base.OnNotifyMessage (m);base.OnNotifyMessage (m);if (m.Msg == WM_ENTERSIZEMOVE)if (m.Msg == WM_ENTERSIZEMOVE){{axMapControl1.SuppressResizeDrawing(true, 0);axMapControl1.SuppressResizeDrawing(true, 0);axPageLayoutControl1.SuppressResizeDrawing(true, 0);axPageLayoutControl1.SuppressResizeDrawing(true, 0);}}else if (m.Msg == WM_EXITSIZEMOVE)else if (m.Msg == WM_EXITSIZEMOVE){{axMapControl1.SuppressResizeDrawing(false, 0);axMapControl1.SuppressResizeDrawing(false, 0);axPageLayoutControl1.SuppressResizeDrawing(false, 0);axPageLayoutControl1.SuppressResizeDrawing(false, 0);}}}}

6.Xây dựng và sau đó chạy thử chương trình. Thử thay đổi kích cỡ Form6.Xây dựng và sau đó chạy thử chương trình. Thử thay đổi kích cỡ Form

Thêm các câu lệnh vào ToolbarControlThêm các câu lệnh vào ToolbarControl

ArcGIS Engine xây dựng trên 120 câu lệnh và công cụ để làm việc trực tiếpArcGIS Engine xây dựng trên 120 câu lệnh và công cụ để làm việc trực tiếp với MapControl, PageLayoutControl và ToolbarControl. Những câu lệnh và côngvới MapControl, PageLayoutControl và ToolbarControl. Những câu lệnh và công cụ này cung cấp cho bạn rất nhiều các chức năng GIS được sử dụng thường xuyêncụ này cung cấp cho bạn rất nhiều các chức năng GIS được sử dụng thường xuyên cho việc điều chỉnh bản đồ, quản lý ảnh và lựa chọn các tính năng. Bạn sẽ thêmcho việc điều chỉnh bản đồ, quản lý ảnh và lựa chọn các tính năng. Bạn sẽ thêm những câu lệnh và công cụ đó vào ứng dụng của bạn.những câu lệnh và công cụ đó vào ứng dụng của bạn.

1.Thêm những dòng mã sau vào sự kiện Form_Load:1.Thêm những dòng mã sau vào sự kiện Form_Load:

private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{string progID;string progID;//Thêm những câu lệnh thông thường.//Thêm những câu lệnh thông thường.progID = "esriControlToolsGeneric.ControlsOpenDocCommand";progID = "esriControlToolsGeneric.ControlsOpenDocCommand";axToolbarControl1.AddItem(progID, -1 , -1, false, 0,axToolbarControl1.AddItem(progID, -1 , -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);//Thêm những câu lệnh điều chỉnh PageLayout.//Thêm những câu lệnh điều chỉnh PageLayout.progID = "esriControlToolsPageLayout.ControlsPageZoomInTool";progID = "esriControlToolsPageLayout.ControlsPageZoomInTool";axToolbarControl1.AddItem(progID, -1, -1, true, 0,axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID = "esriControlToolsPageLayout.ControlsPageZoomOutTool";progID = "esriControlToolsPageLayout.ControlsPageZoomOutTool";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID = "esriControlToolsPageLayout.ControlsPagePanTool";progID = "esriControlToolsPageLayout.ControlsPagePanTool";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID = "esriControlToolsPageLayout.ControlsPageZoomWholePageCommand";progID = "esriControlToolsPageLayout.ControlsPageZoomWholePageCommand";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID =progID =

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

10

Page 11: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

"esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand";"esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID =progID ="esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand";"esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);////Thêm những câu lệnh điều chỉnh Map.Thêm những câu lệnh điều chỉnh Map.progID = "esriControlToolsMapNavigation.ControlsMapZoomInTool";progID = "esriControlToolsMapNavigation.ControlsMapZoomInTool";axToolbarControl1.AddItem(progID, -1, -1, true, 0,axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID = "esriControlToolsMapNavigation.ControlsMapZoomOutTool";progID = "esriControlToolsMapNavigation.ControlsMapZoomOutTool";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID = "esriControlToolsMapNavigation.ControlsMapPanTool";progID = "esriControlToolsMapNavigation.ControlsMapPanTool";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);progID = "esriControlToolsMapNavigation.ControlsMapFullExtentCommand";progID = "esriControlToolsMapNavigation.ControlsMapFullExtentCommand";axToolbarControl1.AddItem(progID, -1, -1, false, 0,axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);esriCommandStyles.esriCommandStyleIconOnly);}}

Xây dựng và chạy thử ứng dụng. ToolbarControl bây giờ chứa các câu lệnhXây dựng và chạy thử ứng dụng. ToolbarControl bây giờ chứa các câu lệnh ArcGIS Engine và các công cụ bạn có thể sử dụng để điều chỉnh bản đồ được nạpArcGIS Engine và các công cụ bạn có thể sử dụng để điều chỉnh bản đồ được nạp trong PageLayoutControl. Sử dụng các câu lệnh page layout để điều chỉnh quanhtrong PageLayoutControl. Sử dụng các câu lệnh page layout để điều chỉnh quanh page layout thực sự và các câu lệnh bản đồ để điều chỉnh dữ liệu xuất hiện trongpage layout thực sự và các câu lệnh bản đồ để điều chỉnh dữ liệu xuất hiện trong khung dữ liệu. Sử dụng câu lệnh mở tài liều để duyệt và nạp các tài liệu khác.khung dữ liệu. Sử dụng câu lệnh mở tài liều để duyệt và nạp các tài liệu khác.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

11

Page 12: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

Tạo Popup menu cho LayoutControlTạo Popup menu cho LayoutControl

Cùng với việc thêm các câu lệnh ArcGIS Engine vào ToolbarControl để làmCùng với việc thêm các câu lệnh ArcGIS Engine vào ToolbarControl để làm việc với các buddy control, bạn còn có thể tạo các popup menu từ các câu lệnhviệc với các buddy control, bạn còn có thể tạo các popup menu từ các câu lệnh ArcGIS Engine. Bạn sẽ thêm mọt popup menu làm việc với PageLayoutControl.ArcGIS Engine. Bạn sẽ thêm mọt popup menu làm việc với PageLayoutControl. Popup Menu này sẽ hiển thị bất cứ khi nào bạn kích chuột phải trong vùng hiểnPopup Menu này sẽ hiển thị bất cứ khi nào bạn kích chuột phải trong vùng hiển thị của PageLayoutControlthị của PageLayoutControl

1. Thêm những biến thành viên sau :1. Thêm những biến thành viên sau :

public class Form1 : System.Windows.Forms.Formpublic class Form1 : System.Windows.Forms.Form{{private ESRI.ArcGIS.ToolbarControl.AxToolbarControlprivate ESRI.ArcGIS.ToolbarControl.AxToolbarControlaxToolbarControl1;axToolbarControl1;private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;private ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;private ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;private ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControlprivate ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControlaxPageLayoutControl1;axPageLayoutControl1;private IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass(); //Theprivate IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass(); //Thepopup menupopup menu……

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

12

Page 13: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

2. Thêm những dòng code sau vào sự kiện Form_Load tiếp theo những dòng2. Thêm những dòng code sau vào sự kiện Form_Load tiếp theo những dòng code thêm các lệnh vào ToolbarControl, nhưng trước các dòng code nạp (load)code thêm các lệnh vào ToolbarControl, nhưng trước các dòng code nạp (load) bản đồ :bản đồ :

private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{//Thêm những câu lệnh điều//Thêm những câu lệnh điều chỉnh bản đồ chỉnh bản đồ//Chia sẻ command pool của ToobarControl.//Chia sẻ command pool của ToobarControl.m_ToolbarMenu.CommandPool = axToolbarCom_ToolbarMenu.CommandPool = axToolbarControl1.CommandPool;ntrol1.CommandPool;//Thêm những câu lệnh vào toolbarMenu.//Thêm những câu lệnh vào toolbarMenu.progID = "esriControlToolsPageLayout.ControlsPageZoomInFixedCommand";progID = "esriControlToolsPageLayout.ControlsPageZoomInFixedCommand";m_ToolbarMenu.AddItem(progID, -1, -1, false,m_ToolbarMenu.AddItem(progID, -1, -1, false,esriCommandStyles.esriCommandStyleIconAndText);esriCommandStyles.esriCommandStyleIconAndText);progID = "esriControlToolsPageLayout.ControlsPageZoomOutFixedCommand";progID = "esriControlToolsPageLayout.ControlsPageZoomOutFixedCommand";m_ToolbarMenu.AddItem(progID, -1, -1, false,m_ToolbarMenu.AddItem(progID, -1, -1, false,esriCommandStyles.esriCommandStyleIconAndText);esriCommandStyles.esriCommandStyleIconAndText);progID = "esriControlToolsPageLayout.ControlsPageZoomWholePageCommand";progID = "esriControlToolsPageLayout.ControlsPageZoomWholePageCommand";m_ToolbarMenu.AddItem(progID, -1, -1, false,m_ToolbarMenu.AddItem(progID, -1, -1, false,esriCommandStyles.esriCommandStyleIconAndText);esriCommandStyles.esriCommandStyleIconAndText);progID =progID ="esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand";"esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand";m_ToolbarMenu.AddItem(progID, -1, -1, true,m_ToolbarMenu.AddItem(progID, -1, -1, true,esriCommandStyles.esriCommandStyleIconAndText);esriCommandStyles.esriCommandStyleIconAndText);progID =progID ="esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand";"esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand";m_ToolbarMenu.AddItem(progID, -1, -1, false,m_ToolbarMenu.AddItem(progID, -1, -1, false,esriCommandStyles.esriCommandStyleIconAndText);esriCommandStyles.esriCommandStyleIconAndText);// “Móc” axPageLayoutControl với ToolbarMenu.// “Móc” axPageLayoutControl với ToolbarMenu.m_ToolbarMenu.SetHook(axPageLayoutControl1);m_ToolbarMenu.SetHook(axPageLayoutControl1);//Nạp bản đồ...//Nạp bản đồ...}}

3.Hiển thị Form ở dạng đang thiết kế và chọn axPageLayoutControl1 từ cửa sổ3.Hiển thị Form ở dạng đang thiết kế và chọn axPageLayoutControl1 từ cửa sổ thuộc tính, sau đó hiển thị các sự kiện của axPageLayoutControl. Kích đúp vào sựthuộc tính, sau đó hiển thị các sự kiện của axPageLayoutControl. Kích đúp vào sự kiện OnMouseDown để thêm phương thức xử lý sự kiệnkiện OnMouseDown để thêm phương thức xử lý sự kiện

4.Trong sự kiện axPageLayoutControl_OnMouseDown thêm những dòng code4.Trong sự kiện axPageLayoutControl_OnMouseDown thêm những dòng code sau:sau:

private void axPageLayoutControl1_OnMouseDown(object sender,private void axPageLayoutControl1_OnMouseDown(object sender,ESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnMouseDownEvent e)ESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnMouseDownEvent e){{//popup ToobarMenu.//popup ToobarMenu.if (e.button == 2)if (e.button == 2){{m_ToolbarMenu.PopupMenu(e.x,e.y,axPageLayoutControl1.hWnd);m_ToolbarMenu.PopupMenu(e.x,e.y,axPageLayoutControl1.hWnd);}}}}

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

13

Page 14: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

5.Xây dựng và chạy thử chương trình. Kích chuột phải lên vùng hiển thị của5.Xây dựng và chạy thử chương trình. Kích chuột phải lên vùng hiển thị của PageLayoutControl để hiện thị popup menu, và sau đó điều chỉnh quanh pagePageLayoutControl để hiện thị popup menu, và sau đó điều chỉnh quanh page layout.layout.

Điều khiển việc chỉnh sửa nhãn trong TOCControlĐiều khiển việc chỉnh sửa nhãn trong TOCControl

Theo mặc định, TOCControl cho phép người dùng thiết đặt việc ẩn hay hiệnTheo mặc định, TOCControl cho phép người dùng thiết đặt việc ẩn hay hiện của các lớp và thay đổi bản đồ và tên các lớp khi chúng xuất hiện. Bạn sẽ thêm codecủa các lớp và thay đổi bản đồ và tên các lớp khi chúng xuất hiện. Bạn sẽ thêm code để ngăn cản user chỉnh sửa tên và thay thế chúng với một chuỗi trống.để ngăn cản user chỉnh sửa tên và thay thế chúng với một chuỗi trống.

1.Thêm những dòng code vào đầu sự kiện Form_Load:1.Thêm những dòng code vào đầu sự kiện Form_Load:

privaprivate void Form1_Load(object sender, System.EventArgs e)te void Form1_Load(object sender, System.EventArgs e){{axTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual;axTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual;//Thêm những câu lệnh chung…//Thêm những câu lệnh chung…} }

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

14

Page 15: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

2.Hiển thị Form ở dạng thiết kế và chọn AxTOCControl từ cửa sổ thuộc tính2.Hiển thị Form ở dạng thiết kế và chọn AxTOCControl từ cửa sổ thuộc tính và hiển thị các sự kiện AxTOCControl. Kích dúp vào OnEndLabelEdit đê thêmvà hiển thị các sự kiện AxTOCControl. Kích dúp vào OnEndLabelEdit đê thêm phương thức xử lý sự kiện.phương thức xử lý sự kiện.

3. Thêm những dòng code vào sự kiện axTOCControl_OnEndLabelEdit:3. Thêm những dòng code vào sự kiện axTOCControl_OnEndLabelEdit:

private void axTOCControl1_OnEndLabelEdit(object sender,private void axTOCControl1_OnEndLabelEdit(object sender,ESRI.ArcGIS.TOCControl.ITOCControlEvents_OnEndLabelEditEvent e)ESRI.ArcGIS.TOCControl.ITOCControlEvents_OnEndLabelEditEvent e){{//Nếu nhãn mới là một chuỗi trắng thì tạm ngừng việc chỉnh sửa lại.//Nếu nhãn mới là một chuỗi trắng thì tạm ngừng việc chỉnh sửa lại.string newLabel = e.newLabel;string newLabel = e.newLabel;if (newLabel.Trim() == "")if (newLabel.Trim() == ""){{e.canEdit = false;e.canEdit = false;}}}}

4.Xây dựng và chạy thử chương trình. Để điều chỉnh một bản đồ, một lớp ,tiêu4.Xây dựng và chạy thử chương trình. Để điều chỉnh một bản đồ, một lớp ,tiêu đề hay các nhãn chú thích trong TOCControl, click vào nó 1 lần và sau đó click vàođề hay các nhãn chú thích trong TOCControl, click vào nó 1 lần và sau đó click vào nó lần thứ 2 để bắt đầu thay đổi nhãn. Thử thay thế nhãn với một chuỗi trắng. Bạn cónó lần thứ 2 để bắt đầu thay đổi nhãn. Thử thay thế nhãn với một chuỗi trắng. Bạn có thể sử dụng phím ESC bất cứ khi nào trong quá trình chỉnh sửa nhãn để tạm ngừngthể sử dụng phím ESC bất cứ khi nào trong quá trình chỉnh sửa nhãn để tạm ngừng việc thay đổi nhãn lại.việc thay đổi nhãn lại.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

15

Page 16: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

VẽVẽ các hình khối trong MapControl các hình khối trong MapControl

Bạn sẽ sử dụng MapControl như là một cửa sổ khung nhìn và vẽ lên trên phạm viBạn sẽ sử dụng MapControl như là một cửa sổ khung nhìn và vẽ lên trên phạm vi hiện thời của bản đồ bên trong PageLayoutControl. Khi bạn điều chỉnh xung quanhhiện thời của bản đồ bên trong PageLayoutControl. Khi bạn điều chỉnh xung quanh dữ liệu bên trong khung dữ liệu của PageLayoutControl, bạn sẽ thấy cập nhật củadữ liệu bên trong khung dữ liệu của PageLayoutControl, bạn sẽ thấy cập nhật của khung cửa sổ MapControl.khung cửa sổ MapControl.

1.1. Thêm những biến thành viên sau:Thêm những biến thành viên sau:

public class Form1 : System.Windows.Forms.Formpublic class Form1 : System.Windows.Forms.Form{{private ESRI.ArcGIS.ToolbarControl.AxToolbarControl axToolbarControl1;private ESRI.ArcGIS.ToolbarControl.AxToolbarControl axToolbarControl1;private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;private ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;private ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;private ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControlprivate ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControlaxPageLayoutControl1;axPageLayoutControl1;private IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass();private IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass();private IEnvelope m_Envelope; //Đường bao đã được vẽ trên MapControl.private IEnvelope m_Envelope; //Đường bao đã được vẽ trên MapControl.private Object m_FillSymbol; //Biểu tượng để vẽ đường bao trong MapControl.private Object m_FillSymbol; //Biểu tượng để vẽ đường bao trong MapControl.private ITransformEvents_VisibleBoundsUpdatedEventHandlerprivate ITransformEvents_VisibleBoundsUpdatedEventHandlervisBoundsUpdatedE; //Sự kiện tiêu điểm bản đồ của PageLayoutMapControl.visBoundsUpdatedE; //Sự kiện tiêu điểm bản đồ của PageLayoutMapControl.

2.2. Tạo một hàm mới gọi là CreateOverviewSymbol. Đây là nơi bạn sẽ tạo ra cácTạo một hàm mới gọi là CreateOverviewSymbol. Đây là nơi bạn sẽ tạo ra các biểu tượng được sử dụng trong MapControl để đại diện cho phạm vi của dữbiểu tượng được sử dụng trong MapControl để đại diện cho phạm vi của dữ liệu trong bản đồ của PageLayoutControl. Thêm những dòng code sau để tạoliệu trong bản đồ của PageLayoutControl. Thêm những dòng code sau để tạo ra hàm:ra hàm:

private void CreateOverviewSymbol()private void CreateOverviewSymbol(){{//Lấy giao diện IRGBColor.//Lấy giao diện IRGBColor.IRgbColor color = new RgbColor();IRgbColor color = new RgbColor();//Đặt thuộc tính màu.//Đặt thuộc tính màu.color.RGB = 255;color.RGB = 255;//Lấy giao điện biểu tượng ILine//Lấy giao điện biểu tượng ILineILineSymbol outline = new SimpleLineSymbol();ILineSymbol outline = new SimpleLineSymbol();//Đặt thuộc tính của biểu tượng đường thẳng.//Đặt thuộc tính của biểu tượng đường thẳng.outline.Width = 1.5;outline.Width = 1.5;outline.Color = color;outline.Color = color;//Lấy giao diện IFillSymbol.//Lấy giao diện IFillSymbol.ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();//Thiết đặt thuộc tính của fill symbol.//Thiết đặt thuộc tính của fill symbol.simpleFillSymbol.Outline = outline;simpleFillSymbol.Outline = outline;simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;m_FillSymbol = simpleFillSymbol;m_FillSymbol = simpleFillSymbol;}}

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

16

Page 17: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

3.3. Gọi hàm CreateOverviewSymbol từ sự kiện Form_Load trước đoạn mã vềGọi hàm CreateOverviewSymbol từ sự kiện Form_Load trước đoạn mã về chỉnh sửa nhãn cho TOCControl.chỉnh sửa nhãn cho TOCControl.

private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{//Tạo ra biểu tượng sử dụng trong MapControl.//Tạo ra biểu tượng sử dụng trong MapControl.CreateOverviewSymbol();CreateOverviewSymbol();//Thiết đặt chỉnh sửa nhãn…//Thiết đặt chỉnh sửa nhãn…}}

4. Thêm hàm OnVisibleBoundUpdated. Hàm này sẽ lien kết tới một sự kiệnThêm hàm OnVisibleBoundUpdated. Hàm này sẽ lien kết tới một sự kiện được phát sinh bất cứ khi nào phạm vi của bản đồ bị thay đổi và được sử dụngđược phát sinh bất cứ khi nào phạm vi của bản đồ bị thay đổi và được sử dụng để thiết đặt một đường bao cho ranh giới nhìn thấy được của bản đồ. để thiết đặt một đường bao cho ranh giới nhìn thấy được của bản đồ. Làm tươiLàm tươi MapControl để vẽ hiển thị mới.MapControl để vẽ hiển thị mới.

private void OnVisibleBoundsUpdated(IDisplayTransformation sender, boolprivate void OnVisibleBoundsUpdated(IDisplayTransformation sender, boolsizeChanged)sizeChanged){{//Thiết đặt đường bao mới cho phạm vi nhìn thấy được.//Thiết đặt đường bao mới cho phạm vi nhìn thấy được.m_Envelope = sender.VisibleBounds;m_Envelope = sender.VisibleBounds;//Refresh MapControl.//Refresh MapControl.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);esriViewForeground, null, null);}}

5.5. Giao diện sự kiện mặc định của PageLayoutControl làGiao diện sự kiện mặc định của PageLayoutControl là IPageLayoutControlEvents. Những sự kiện này không biết khi nào phạm viIPageLayoutControlEvents. Những sự kiện này không biết khi nào phạm vi của bản đồ bên trong khung dữ liệu thay đổi. Để nó nhận ra sự thay đổicủa bản đồ bên trong khung dữ liệu thay đổi. Để nó nhận ra sự thay đổi này,chúng ta phải dùng giao diện ItransformEvents của tiêu điểm bản đồ bênnày,chúng ta phải dùng giao diện ItransformEvents của tiêu điểm bản đồ bên trong PageLayoutControl. Thêm những dòng code sau vào hàm xử lý sự kiệntrong PageLayoutControl. Thêm những dòng code sau vào hàm xử lý sự kiện PageLayoutControl_OnPageLayoutReplaced trước đoạn mã load bản đồ.PageLayoutControl_OnPageLayoutReplaced trước đoạn mã load bản đồ.

private void axPageLayoutControl1_OnPageLayoutReplaced(object sender,private void axPageLayoutControl1_OnPageLayoutReplaced(object sender,ESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnPageLayoutReplacedEventESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnPageLayoutReplacedEvente)e){{//Lấy giao diện IActiveView của bản đồ trong PageLayoutControl.//Lấy giao diện IActiveView của bản đồ trong PageLayoutControl.IActiveView activeView = (IActiveView)IActiveView activeView = (IActiveView)axPageLayoutControl1.ActiveView.FocusMap;axPageLayoutControl1.ActiveView.FocusMap;//Bẫy ITranformEvents của tiêu điểm bản đồ bên trong PageLayoutControl//Bẫy ITranformEvents của tiêu điểm bản đồ bên trong PageLayoutControlvisBoundsUpdatedE = newvisBoundsUpdatedE = newITransformEvents_VisibleBoundsUpdatedEventHandler(OnVisibleBoundsUpdated);ITransformEvents_VisibleBoundsUpdatedEventHandler(OnVisibleBoundsUpdated);((ITransformEvents_Event)activeView.ScreenDisplay.((ITransformEvents_Event)activeView.ScreenDisplay.DisplayTransformation).VisibleBoundsUpdated += visBoundsUpdatedE;DisplayTransformation).VisibleBoundsUpdated += visBoundsUpdatedE;////Lấy phạm vi của bản đồ.Lấy phạm vi của bản đồ.m_Envelope = activeView.Extent;m_Envelope = activeView.Extent;////Nạp cùng bản đồ đã được tạo ra từ trước trong MapControl.Nạp cùng bản đồ đã được tạo ra từ trước trong MapControl.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

17

Page 18: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

axMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename,null,null);axMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename,null,null);////Đặt phạm vi của MapControl với pham vi đầy đủ của dữ liệu. Đặt phạm vi của MapControl với pham vi đầy đủ của dữ liệu. axMapControl1.Extent = axMapControl1.FullExtent;axMapControl1.Extent = axMapControl1.FullExtent;}}

6.6. Hiển thị Form đang thiết kết và chọn axMapControl1 từ cửa sổ thuộc tính vàHiển thị Form đang thiết kết và chọn axMapControl1 từ cửa sổ thuộc tính và hiển thị các sự kiện của axMapControl. Kích đúp trên sự kiện OnAfterDraw vàhiển thị các sự kiện của axMapControl. Kích đúp trên sự kiện OnAfterDraw và thêm trình xử lý sự kiện.thêm trình xử lý sự kiện.

7.7. Thêm những dòng code sau vào hàm xử lý sự kiệnThêm những dòng code sau vào hàm xử lý sự kiện axMapControl_OnAfterDraw để vẽ một đường bao với biểu tượng mà bạn tạoaxMapControl_OnAfterDraw để vẽ một đường bao với biểu tượng mà bạn tạo ra từ trước trên MapControl.ra từ trước trên MapControl.

private void axMapControl1_OnAfterDraw(object sender,private void axMapControl1_OnAfterDraw(object sender,ESRI.ArcGIS.MapControl.IMapControlEvents2_OnAfterDrawEvent e)ESRI.ArcGIS.MapControl.IMapControlEvents2_OnAfterDrawEvent e){{if (m_Envelope == null)if (m_Envelope == null){{return;return;}}//Nếu nền đã được vẽ lại.//Nếu nền đã được vẽ lại.esriViewDrawPhase viewDrawPhase = (esriViewDrawPhase) e.viewDrawPhase;esriViewDrawPhase viewDrawPhase = (esriViewDrawPhase) e.viewDrawPhase;if (viewDrawPhase == esriViewDrawPhase.esriViewForeground)if (viewDrawPhase == esriViewDrawPhase.esriViewForeground){{IGeometry geometry = m_Envelope;IGeometry geometry = m_Envelope;axMapControl1.DrawShape(geometry, ref m_FillSymbol);axMapControl1.DrawShape(geometry, ref m_FillSymbol);}}}}

8. Xây dựng chương trình và chạy thử. Sử dụng các công cụ điều hướng mà bạnXây dựng chương trình và chạy thử. Sử dụng các công cụ điều hướng mà bạn thêm vào từ trước để thay đổi phạm vi bản đồ trong PageLayoutControlthêm vào từ trước để thay đổi phạm vi bản đồ trong PageLayoutControl.Phạm.Phạm vi mới sẽ được vẽ ra trong MapControl.vi mới sẽ được vẽ ra trong MapControl.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

18

Page 19: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

Tạo công cụ mớiTạo công cụ mới

Tạo các lệnh và công cụ để làm việc với MapControl và PageLayoutControlTạo các lệnh và công cụ để làm việc với MapControl và PageLayoutControl rất giống với việc tạo các lệnh cho ứng dụng ESRI ArcMap bạn đã làm ở các chươngrất giống với việc tạo các lệnh cho ứng dụng ESRI ArcMap bạn đã làm ở các chương trước. Bạn sẽ tạo một công cụ cho phép thêm ngày tháng hiện tại vòa vị trí kíchtrước. Bạn sẽ tạo một công cụ cho phép thêm ngày tháng hiện tại vòa vị trí kích chuột trong PageLayoutControl. Bạn cũng sẽ tạo các lệnh làm việc với MapControlchuột trong PageLayoutControl. Bạn cũng sẽ tạo các lệnh làm việc với MapControl và ToolbarControl.và ToolbarControl.

Đoạn mã cho các công cụ người dùng tự định nghĩa này là đoạn mã nguồn còn lạiĐoạn mã cho các công cụ người dùng tự định nghĩa này là đoạn mã nguồn còn lại của ví dụ này. Nếu bạn muốn sử dụng lệnh người dùng tự định nghĩa một cách trựccủa ví dụ này. Nếu bạn muốn sử dụng lệnh người dùng tự định nghĩa một cách trực tiếp chứ không muốn tự tạo nó, bạn có thể đi thẳng tới bước 24.tiếp chứ không muốn tự tạo nó, bạn có thể đi thẳng tới bước 24.

1.1. ạo một đề án ‘Class Library’ trong C# từ hộp thoại New.ạo một đề án ‘Class Library’ trong C# từ hộp thoại New.2.2. Đặt tên chương trình là Commands, duyệt vị trí đặt file và save chương trình.Đặt tên chương trình là Commands, duyệt vị trí đặt file và save chương trình.3.3. Click trên menu Project và chọn Add Reference…Click trên menu Project và chọn Add Reference…4.4. Trong hộp thoại Add Reference, check ‘ESRI.ArcGIS.Geometry’,Trong hộp thoại Add Reference, check ‘ESRI.ArcGIS.Geometry’,

‘ESRI.ArcGIS.System’ , ‘ESRI.ArcGIS.SystemUI’ , ‘ESRI.ArcGIS.Utility’ và‘ESRI.ArcGIS.System’ , ‘ESRI.ArcGIS.SystemUI’ , ‘ESRI.ArcGIS.Utility’ và ‘ESRI.ArcGIS.ControlCommands’.‘ESRI.ArcGIS.ControlCommands’.

5.5. Them một lớp vào project, đặt tên là AddDateTool.Them một lớp vào project, đặt tên là AddDateTool.6. Click vào menu Project và chọn Add Existing Item. Duyệt file date.bmp từ vịClick vào menu Project và chọn Add Existing Item. Duyệt file date.bmp từ vị

trí để mã nguồn ví dụ và thêm nó vào đồ án của bạn.trí để mã nguồn ví dụ và thêm nó vào đồ án của bạn.7. Click vào date.bmp trong cửa sổ Solution Explorer để hiển thị các thuộc tínhClick vào date.bmp trong cửa sổ Solution Explorer để hiển thị các thuộc tính

của nó trong cửa sổ thuộc tính. Thay đổi thuộc tính Build Action thànhcủa nó trong cửa sổ thuộc tính. Thay đổi thuộc tính Build Action thành

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

19

Page 20: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

Embedded Resource. Ảnh date.bmp được sử dụng làm trên bề mặt của nútEmbedded Resource. Ảnh date.bmp được sử dụng làm trên bề mặt của nút lệnh.lệnh.

8.8. Thay đổi namespace của AddDateTool thành CSharpDotNETCommands.Thay đổi namespace của AddDateTool thành CSharpDotNETCommands.

namespace CSharpDotNETCommandsnamespace CSharpDotNETCommands{{….….

9.9. Thêm những directive sau ở đoạn mã trên cùng:Thêm những directive sau ở đoạn mã trên cùng:

using System;using System;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.ControlCommands;using ESRI.ArcGIS.ControlCommands;using ESRI.ArcGIS.Utility.BaseClasses;using ESRI.ArcGIS.Utility.BaseClasses;using System.Runtime.InteropServices;using System.Runtime.InteropServices;

10. Khai báo lớp AddDateTool đượcKhai báo lớp AddDateTool được thừa kế từ lớp ảo ESRI BaseTool và thêm thừa kế từ lớp ảo ESRI BaseTool và thêm vào modifier sealed:vào modifier sealed:

public sealed class AddDateTool : BaseToolpublic sealed class AddDateTool : BaseTool

11.11.Thêm những dòng code sau vào constructor của lớp AddDateTool.Thêm những dòng code sau vào constructor của lớp AddDateTool.

public AddDateTool()public AddDateTool(){{//Lấy mảng các tài nguyên trong Assembly.//Lấy mảng các tài nguyên trong Assembly.string[] res = GetType().Assembly.GetManifestResourceNames();string[] res = GetType().Assembly.GetManifestResourceNames();//Thiết đặt thuộc tính cho công cụ.//Thiết đặt thuộc tính cho công cụ.base.m_bitmap = newbase.m_bitmap = newSystem.Drawing.Bitmap(GetType().Assembly.GetManifestResourceStream(res[0]));System.Drawing.Bitmap(GetType().Assembly.GetManifestResourceStream(res[0]));base.m_caption = “Add Date”;base.m_caption = “Add Date”;base.m_category = "CustomCommands";base.m_category = "CustomCommands";base.m_message = "Adds a date element to the page layout";base.m_message = "Adds a date element to the page layout";base.m_name = "CustomCommands_Add Date";base.m_name = "CustomCommands_Add Date";base.m_toolTip = "Add date";base.m_toolTip = "Add date";}}

12.12.Thêm những biến thành viên sau vào lớp AddDateTool:Thêm những biến thành viên sau vào lớp AddDateTool:

public sealed class AddDateTool : BaseToolpublic sealed class AddDateTool : BaseTool{{private IHookHelper m_HookHelper = new HookHelperClass();private IHookHelper m_HookHelper = new HookHelperClass();……

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

20

Page 21: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

13.13.Trong cửa sổ ClassView, điều chỉnh tới phương thức BaseCommand OnCreateTrong cửa sổ ClassView, điều chỉnh tới phương thức BaseCommand OnCreate và chọn chuột phải để hiển thị menu ngữ cảnh.Chọn Add, sau đó nạp chọnvà chọn chuột phải để hiển thị menu ngữ cảnh.Chọn Add, sau đó nạp chọn Override để thêm thuộc tính vào cửa sổ viết codeOverride để thêm thuộc tính vào cửa sổ viết code

14.14.Thêm đoạn mã sau vào phương thức nạp chồng OnCreate:Thêm đoạn mã sau vào phương thức nạp chồng OnCreate:

public override void OnCreate(object hook)public override void OnCreate(object hook){{m_HookHelper.Hook = hook;m_HookHelper.Hook = hook;}}

15.15.Trong cửa sổ ClassView, tìm thuộc tính BaseCommand Enable, bấm chuộtTrong cửa sổ ClassView, tìm thuộc tính BaseCommand Enable, bấm chuột phải để hiển thị menu ngữ cảnh. Chon Add, Override đê thêm thuộc tính nàyphải để hiển thị menu ngữ cảnh. Chon Add, Override đê thêm thuộc tính này vào đoạn mã.vào đoạn mã.

16.16.Thêm đoạn mã sau để nạp chồng giá trị Enable mặc định khi được thực thi bởiThêm đoạn mã sau để nạp chồng giá trị Enable mặc định khi được thực thi bởi lớp BaseTool.lớp BaseTool.

public override bool Enabledpublic override bool Enabled{{getget{{if (m_HookHelper.ActiveView != null)if (m_HookHelper.ActiveView != null){{return true;return true;}}elseelse{{return false;return false;}}}}}}

17.17.Trong cửa sổ ClassView, chỉnh tới phương thức BaseToolOnMouseDown vàTrong cửa sổ ClassView, chỉnh tới phương thức BaseToolOnMouseDown và bấm chuột phải để hiển thị menu ngữ cảnh. Chọn Add, sau đó Override đểbấm chuột phải để hiển thị menu ngữ cảnh. Chọn Add, sau đó Override để thêm thuộc tính vào đoạn mã.thêm thuộc tính vào đoạn mã.

18.18.Thêm đoạn code sau để nạp chồng hàm mặc định OnMouseDown khi đượcThêm đoạn code sau để nạp chồng hàm mặc định OnMouseDown khi được thực thi bởi BaseTool class.thực thi bởi BaseTool class.

public override void OnMouseDown(int Button, int Shift, int X, int Y)public override void OnMouseDown(int Button, int Shift, int X, int Y){{base.OnMouseDown (Button, Shift, X, Y);base.OnMouseDown (Button, Shift, X, Y);//Lấy khung nhìn đang hoạt động.//Lấy khung nhìn đang hoạt động.IActiveView activeView = m_HookHelper.ActiveView;IActiveView activeView = m_HookHelper.ActiveView;//Tạo một thành tố văn bản mới.//Tạo một thành tố văn bản mới.ITextElement textElement = new TextElementClass();ITextElement textElement = new TextElementClass();//Tạo biểu tượng văn bản.//Tạo biểu tượng văn bản.ITextSymbol textSymbol = new TextSymbolClass();ITextSymbol textSymbol = new TextSymbolClass();

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

21

Page 22: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

textSymbol.Size = 25;textSymbol.Size = 25;//Thiết đặt thuộc tính của văn bản.//Thiết đặt thuộc tính của văn bản.textElement.Symbol = textSymbol;textElement.Symbol = textSymbol;textElement.Text = DateTime.Now.ToShortDateString();textElement.Text = DateTime.Now.ToShortDateString();//QI cho IElement.//QI cho IElement.IElement element = (IElement) textElement;IElement element = (IElement) textElement;//Tạo một page point.//Tạo một page point.IPoint point = new PointClass();IPoint point = new PointClass();point = activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);point = activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);//Thiết đặt elements geometry//Thiết đặt elements geometryelement.Geometry = point;element.Geometry = point;activeView.GraphicsContainer.AddElement(element, 0);activeView.GraphicsContainer.AddElement(element, 0);//Làm tươi graphics.//Làm tươi graphics.activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null,activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null,null);null);}}

19.19.ArcGIS Engine thích hợp với các lệnh người dùng tự định nghĩa là một lớpArcGIS Engine thích hợp với các lệnh người dùng tự định nghĩa là một lớp COM, bởi vậy, lớp .NET mà bạn tạo phải được biểu thị như một lớp COMCOM, bởi vậy, lớp .NET mà bạn tạo phải được biểu thị như một lớp COM bằng cách tạo một gói COM có thể gọi được cho lớp .NET đó. Trong cửa sổbằng cách tạo một gói COM có thể gọi được cho lớp .NET đó. Trong cửa sổ Solution Explorer, chọn chuột phải vào project Commands và chọn PropertiesSolution Explorer, chọn chuột phải vào project Commands và chọn Properties từ menu ngữ cảnh.từ menu ngữ cảnh.

20.20.Trong hộp thoại Property, chon Configuration Properties,và click vào Build.Trong hộp thoại Property, chon Configuration Properties,và click vào Build. Trong khung bên phải, thay đổi thuộc tính Register for COM Interop thànhTrong khung bên phải, thay đổi thuộc tính Register for COM Interop thành True. Nhấn OK.True. Nhấn OK.

21.21.Trong cửa sổ lập trình của lớp AddDateTool, thêm vào các dòng lệnh để khaiTrong cửa sổ lập trình của lớp AddDateTool, thêm vào các dòng lệnh để khai báo lớp AddDateTool, xác định các thuộc tính cần thiết cho COM.báo lớp AddDateTool, xác định các thuộc tính cần thiết cho COM.

[ClassInterface(ClassInterfaceType.None)][ClassInterface(ClassInterfaceType.None)][Guid("D880184E-AC81-47E5-B363-781F4DC4528F")][Guid("D880184E-AC81-47E5-B363-781F4DC4528F")]

22.22.Thêm những dòng mã vào lứop AddDateTool sau khi khai báo biến.Đoạn codeThêm những dòng mã vào lứop AddDateTool sau khi khai báo biến.Đoạn code định nghĩa các hàm đăng ký và không đăng ký lớp AddDateTool với loạiđịnh nghĩa các hàm đăng ký và không đăng ký lớp AddDateTool với loại thành phần ESRI Controls Commands sử dụng các loại tiện ích (categoriesthành phần ESRI Controls Commands sử dụng các loại tiện ích (categories utility.)utility.)

//Đăng ký trong loại thành phần 'ESRI Controls Commands' //Đăng ký trong loại thành phần 'ESRI Controls Commands' #region Component Category Registration#region Component Category Registration[ComRegisterFunction()][ComRegisterFunction()][ComVisible(false)][ComVisible(false)]static void RegisterFunction(String sKey)static void RegisterFunction(String sKey){{string fullKey = sKey.Remove(0, 18) + @"\Implemented Categories";string fullKey = sKey.Remove(0, 18) + @"\Implemented Categories";Microsoft.Win32.RegistryKey regKey =Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(fullKey, true); Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(fullKey, true);if (regKey != null)if (regKey != null){{

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

22

Page 23: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

regKey.CreateSubKey("{B284D891-22EE-4F12-A0A9- regKey.CreateSubKey("{B284D891-22EE-4F12-A0A9-B1DDED9197F4}");B1DDED9197F4}");}}}}[ComUnregisterFunction()][ComUnregisterFunction()][ComVisible(false)][ComVisible(false)]static void UnregisterFunction(String sKey)static void UnregisterFunction(String sKey){{string fullKey = sKey.Remove(0, 18) + @"\Implemented Categories";string fullKey = sKey.Remove(0, 18) + @"\Implemented Categories";Microsoft.Win32.RegistryKey regKey =Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(fullKey, true); Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(fullKey, true);if (regKey != null)if (regKey != null){{ regKey.DeleteSubKey("{B284D891-22EE-4F12-A0A9-B1DDED9197F4}"); regKey.DeleteSubKey("{B284D891-22EE-4F12-A0A9-B1DDED9197F4}");}}}}#endregion#endregion

23.23.Xây dựng chương trình.Xây dựng chương trình.24.24.Trong chương trình VS.NET ‘Windows Application ’ bạn đã tạo trước đó,Trong chương trình VS.NET ‘Windows Application ’ bạn đã tạo trước đó,

thêm đoạn mã lệnh sau để thêm những lệnh điều chỉnh bản đồ:thêm đoạn mã lệnh sau để thêm những lệnh điều chỉnh bản đồ:

private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{//Thêm các lệnh điều khiển ArcMap.//Thêm các lệnh điều khiển ArcMap.//Thêm công cụ biểu diễn ngày tháng người dùng tự định nghĩa.//Thêm công cụ biểu diễn ngày tháng người dùng tự định nghĩa.progID = "CSharpDotNETCommands.AddDateTool";progID = "CSharpDotNETCommands.AddDateTool";axToolbarControl1.AddItem(progID, -1, -1, true, 0,axToolbarControl1.AddItem(progID, -1, -1, true, 0, esriCommandStyles.esriCommandStyleIconAndText); esriCommandStyles.esriCommandStyleIconAndText);//Thêm các câu lệnh tới ToolbarMenu.//Thêm các câu lệnh tới ToolbarMenu.}}

25.25.Chạy chương trình và sử dụng AddDateTool để thêm các thành phần văn bảnChạy chương trình và sử dụng AddDateTool để thêm các thành phần văn bản vào PageLayoutControl hiển thị ngày hiện thời.vào PageLayoutControl hiển thị ngày hiện thời.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

23

Page 24: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

Cá nhân hóa ToolbarControlCá nhân hóa ToolbarControl

Cùng với việc thêm các lệnh và công cụ ArcGIS Engine vào ToolbarControlCùng với việc thêm các lệnh và công cụ ArcGIS Engine vào ToolbarControl trong sự kiện Form_Load,bạn còn có thể thực hiện điều này thông qua việc cá nhântrong sự kiện Form_Load,bạn còn có thể thực hiện điều này thông qua việc cá nhân hóa ToolbarControl và sử dụng hộp thoại cá nhân hóa. Để làm như thế, bạn sẽ đặthóa ToolbarControl và sử dụng hộp thoại cá nhân hóa. Để làm như thế, bạn sẽ đặt ToolbarControl theo kiểu customize và hiển thị hộp thoại customize.ToolbarControl theo kiểu customize và hiển thị hộp thoại customize.

1.Thêm những biến thành viên sau:1.Thêm những biến thành viên sau:

public class Form1 : System.Windows.Forms.Formpublic class Form1 : System.Windows.Forms.Form{{……private ITransformEvents_VisibleBoundsUpdatedEventHandlerprivate ITransformEvents_VisibleBoundsUpdatedEventHandler visBoundsUpdatedE; visBoundsUpdatedE;private ICustomizeDialog m_CustomizeDialog = newprivate ICustomizeDialog m_CustomizeDialog = new CustomizeDialogClass(); CustomizeDialogClass(); //CustomizeDialog được sử dụng bởi ToolbarControl.//CustomizeDialog được sử dụng bởi ToolbarControl.private ICustomizeDialogEvents_OnStartDialogEventHandlerprivate ICustomizeDialogEvents_OnStartDialogEventHandler startDialogE; startDialogE;private ICustomizeDialogEvents_OnCloseDialogEventHandlerprivate ICustomizeDialogEvents_OnCloseDialogEventHandler closeDialogE; closeDialogE;

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

24

Page 25: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

2.Tạo một hàm mới có tên là CreateCustomizeDialog. Đây là nơi bạn sẽ tạo2.Tạo một hàm mới có tên là CreateCustomizeDialog. Đây là nơi bạn sẽ tạo một hộp thoại customize bằng cách thêm những câu lệnh sau trong hàm:một hộp thoại customize bằng cách thêm những câu lệnh sau trong hàm:

private void CreateCustomizeDialog()private void CreateCustomizeDialog()

startDialogE = newstartDialogE = newICustomizeDialogEvents_OnStartDialogEventHandler(OnStartDialog);ICustomizeDialogEvents_OnStartDialogEventHandler(OnStartDialog);((ICustomizeDialogEvents_Event)m_CustomizeDialog).OnStartDialog +=((ICustomizeDialogEvents_Event)m_CustomizeDialog).OnStartDialog +=startDialogE;startDialogE;closeDialogE = newcloseDialogE = newICustomizeDialogEvents_OnCloseDialogEventHandler(OnCloseDialog);ICustomizeDialogEvents_OnCloseDialogEventHandler(OnCloseDialog);((ICustomizeDialogEvents_Event)m_CustomizeDialog).OnCloseDialog +=((ICustomizeDialogEvents_Event)m_CustomizeDialog).OnCloseDialog +=closeDialogE;closeDialogE;//Thiết đặt tựa đề //Thiết đặt tựa đề m_CustomizeDialog.DialogTitle = “Customize ToolbarControl Items”;m_CustomizeDialog.DialogTitle = “Customize ToolbarControl Items”;//Hiển thị nút lệnh “Add from file”//Hiển thị nút lệnh “Add from file”m_CustomizeDialog.ShowAddFromFile = true;m_CustomizeDialog.ShowAddFromFile = true;//Thiết đặt ToolbarControl có thể thêm các item.//Thiết đặt ToolbarControl có thể thêm các item.m_CustomizeDialog.SetDoubleClickDestination(axToolbarControl1);m_CustomizeDialog.SetDoubleClickDestination(axToolbarControl1);}}

3.Gọi hàm CreateCustomizeDialog từ sự kiện Form_Load trước câu lệnh gọi3.Gọi hàm CreateCustomizeDialog từ sự kiện Form_Load trước câu lệnh gọi hàm CreateOverviewSymbol :hàm CreateOverviewSymbol :private void Form1_Load(object sender, System.EventArgs e)private void Form1_Load(object sender, System.EventArgs e){{//tạo hộp thoại Customize cho ToolbarControl.//tạo hộp thoại Customize cho ToolbarControl.CreateCustomizeDialog();CreateCustomizeDialog();//Tạo biểu tượng sử dụng trong ToolbarControl.//Tạo biểu tượng sử dụng trong ToolbarControl.}}

4.Thêm một check box vào Form, đặt tên là ‘chkCustomize’ và nhãn là4.Thêm một check box vào Form, đặt tên là ‘chkCustomize’ và nhãn là ‘Customize’‘Customize’

5.Hiển thị Form ở dạng thiết kế và chọn chkCustomize từ cửa sổ thuộc tính và5.Hiển thị Form ở dạng thiết kế và chọn chkCustomize từ cửa sổ thuộc tính và hiển thị các sự kiện của chkCustomize. Kích đúp vào sự kiện CheckedChanged đểhiển thị các sự kiện của chkCustomize. Kích đúp vào sự kiện CheckedChanged để thêm một trình xử lý sự kiện vào cửa sổ lập trình.thêm một trình xử lý sự kiện vào cửa sổ lập trình.

6.Thêm đoạn code sau vào sự kiện chkCustomize_CheckedChanged:6.Thêm đoạn code sau vào sự kiện chkCustomize_CheckedChanged:

private void chkCustomize_CheckedChanged(object sender, System.EventArgsprivate void chkCustomize_CheckedChanged(object sender, System.EventArgse)e){{//Hiển thị hay dấu đi hộp thoại customize.//Hiển thị hay dấu đi hộp thoại customize.if (chkCustomize.Checked == false)if (chkCustomize.Checked == false){{m_CustomizeDialog.CloseDialog();m_CustomizeDialog.CloseDialog();axToolbarControl1.Customize = false;axToolbarControl1.Customize = false;}}elseelse{{

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

25

Page 26: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

m_CustomizeDialog.StartDialog(axToolbarControl1.hWnd);m_CustomizeDialog.StartDialog(axToolbarControl1.hWnd);axToolbarControl1.Customize = true;axToolbarControl1.Customize = true;}}}}

7.Thêm hàm xử lý sự kiện OnStartDialog và OnCloseDialog7.Thêm hàm xử lý sự kiện OnStartDialog và OnCloseDialog. Những hàm này. Những hàm này được liên kết với các sự kiện phát sinh bất cư skhi nào hộp thoại customize mở hoặcđược liên kết với các sự kiện phát sinh bất cư skhi nào hộp thoại customize mở hoặc đóng.đóng.

private void OnStartDialog()private void OnStartDialog(){{axToolbarControl1.Customize = true;axToolbarControl1.Customize = true;}}private void OnCloseDialog()private void OnCloseDialog(){{axToolbarControl1.Customize = false;axToolbarControl1.Customize = false;chkCustomize.Checked = false;chkCustomize.Checked = false;}}

8.Xây dựng và chạy thử chương trình và check vào check box customize để8.Xây dựng và chạy thử chương trình và check vào check box customize để thiết đặt ToolbarControl theo kiểu cá nhân hóa và mở hộp thoại customize.thiết đặt ToolbarControl theo kiểu cá nhân hóa và mở hộp thoại customize.

9.Trong tab Commands chọn loại Graphics Element, kích đúp vào Select9.Trong tab Commands chọn loại Graphics Element, kích đúp vào Select Elements để thêm nó vào ToolbarControl. Click vào các biểu tượng trênElements để thêm nó vào ToolbarControl. Click vào các biểu tượng trên ToolbarControl, bạn có thể điều chỉnh giao diện theo ý bạn, hoặc nhóm các đốiToolbarControl, bạn có thể điều chỉnh giao diện theo ý bạn, hoặc nhóm các đối tượng.tượng.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

26

Page 27: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

10.Tạm ngừng cá nhân hóa ứng dụng. Sử dụng công cụ select để di chuyển10.Tạm ngừng cá nhân hóa ứng dụng. Sử dụng công cụ select để di chuyển dòng văn bản chứa ngày tháng hiện thời.dòng văn bản chứa ngày tháng hiện thời.

Triển khaiTriển khai ứng dụng ứng dụng

Để triển khai thành công ứng dụng trong một máy tính khác, ứng dụng phải đượcĐể triển khai thành công ứng dụng trong một máy tính khác, ứng dụng phải được có một license. Trước hết nó sẽ kiểm tra xem product license có sẵn sàng không vàcó một license. Trước hết nó sẽ kiểm tra xem product license có sẵn sàng không và sau đó nó khởi động license này. Nếu đăng ký license thất bại, ứng dụng không thểsau đó nó khởi động license này. Nếu đăng ký license thất bại, ứng dụng không thể hoạt động.hoạt động.

1.1. Thêm những biến thành viên sau:Thêm những biến thành viên sau:2.2. Thêm những dòng code sau vào đầu hàm xử lý sự kiện Form_Load:Thêm những dòng code sau vào đầu hàm xử lý sự kiện Form_Load:3. Hiển thị Form ở dạng thiết kế và chọn Form1 từ cửa sổ thuộc tính và hiển thịHiển thị Form ở dạng thiết kế và chọn Form1 từ cửa sổ thuộc tính và hiển thị

các sự kiện của Form. Click đúp vào sự kiện Closing để thêm hàm xử lý sựcác sự kiện của Form. Click đúp vào sự kiện Closing để thêm hàm xử lý sự kiện.kiện.

4.4. Trong sự kiện Form_Closing , thêm những dòng code sau:Trong sự kiện Form_Closing , thêm những dòng code sau:5.5. Xây dựng chương trình và phát hành ứng dụng.Xây dựng chương trình và phát hành ứng dụng.

Để triển khai ứng dụng thàn công ở một máy khách:Để triển khai ứng dụng thàn công ở một máy khách:

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

27

Page 28: Xay Dung Arcgis Engine Voi Cac Dieu Khien Windows

Nguyễn Hoàng Minh----------------------------------------------------------------------------------------------------------------------

+ File chạy của chương trình và DLL chứa lệnh cá nhân hóa cần được triển khai+ File chạy của chương trình và DLL chứa lệnh cá nhân hóa cần được triển khai trên các máy khách. Công cụ đăng ký thành phần (RegAsm.exe) được sử dụng đểtrên các máy khách. Công cụ đăng ký thành phần (RegAsm.exe) được sử dụng để thêm thông tin về các lớp được xây dựng với registry.thêm thông tin về các lớp được xây dựng với registry.

+Máy khách cần phải cài đặt ArcGIS Engine Runtime và bản quyền ArcGIS+Máy khách cần phải cài đặt ArcGIS Engine Runtime và bản quyền ArcGIS Engine tiêu chuẩn.Engine tiêu chuẩn.

+Máy khách phải được cài đặt .NET Framework 1.1.+Máy khách phải được cài đặt .NET Framework 1.1.

-----------------------------------------------------------------------------------------------------------------Xây dựng ứng dụng ArcGIS Engine với các điều khiển Windows

28