ArcGIS-Engine+C-实例开发教程_第1页
ArcGIS-Engine+C-实例开发教程_第2页
ArcGIS-Engine+C-实例开发教程_第3页
ArcGIS-Engine+C-实例开发教程_第4页
ArcGIS-Engine+C-实例开发教程_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

«ArcGISEngine+C#实例开发教程》

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

本讲主要是使用MapControl>PageLayoutControRToolbarControKTOCControl四个

控件建立起基本的桌面GIS应用程序框架。最终成果预览如下:

1、新建项目

启动VS2005,选择“文件|新建I项目”,在项目类型中选择VisualC#,再选择Windows

应用程序模板,输入名称“3sdnMap”,点击确定。

新建项目田园

在解决方案管理器中将“Forml.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗

体,将其属性中的“Text”改为“3sdnMap”。

2、添加控件

选择工具箱中的“菜单和工具栏IMenuStrip”,将其拖入窗体。

选择工具箱中的"ArcGISWindowsForms"节,将"ToolbarControl”控件拖入窗体,

并将其属性中的Dock设置为Top。

选择工具箱中的“菜单和工具栏IStatusStrip”,将其拖入到窗体。

选择工具箱中的“容器ISplitContainer”容器拖入窗体,并将其属性中的Dock设置为

Fillo

将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为

Fill。点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name

设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,

Text设置为属性。如下所示。

选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为FilL

选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。

拖入TabControl控件到Panel2,设置Dock属性为Fill,并上述类似的方法,将两个

选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。

选择“地图”选项卡,拖入MapControl控件,设置Dock属性为Fill。

选择‘'制版"选项卡,拖入PageLayoutControl控件,设置Dock属性为Fill。

最后将LicenseControl控件拖入到窗体的任意地方。

按F5编译运行,可以看到刚才布局好的程序界面了。

3、控件绑定

通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此

要进行控件绑定。

分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControll,如下图

所示。

这样,工具条和图层控件就与地图控件关联了。

4、添加工具

此时,工具条中还没有任何工具,添加的方法也很简单。右击ToolbarControl,选

择"属性|Items”,点击Add,选择Commands选项卡中的Generic,双击Open、SaveAs、

Redo、Undo即可将相应工具添加到工具条。

常见的工具有:

MapNavigation中的导航工具,MapInquiry中的查询工具,FeatureSelection中的

选择工具,你可以根据需要酌情添加工具。

5、编译运行

按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,你可以

通过工具条的工具打开地图文档,浏览地图了,效果如开篇所示。

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

在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下。

在“属性”选项卡中,我们当时添加的是DataGridView控件,这个控件是用来显示数

据表的,而专门用于属性的查询和设置的控件是PropertyGrid控件。因此请你删除

"属性"选项卡中的DataGridView控件,再把位于“工具箱|所有Windows窗体

|PropertyGrid"(如果没有,右击选择“选择项”以添加此控件)控件拖到该选项卡。

在这一讲中,主要讲解菜单的添加和实现。

1、添加菜单

在设计视图中,单击菜单栏,会出现“请在此处键入”的提示,单击提示就可以键入菜

单名称,如“文件”,再单击“文件”,即可输入其下拉子菜单,如下所示:

[imgjfile:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/T

emporary%20Internet%20Files/Content.IE5/WVUJQZMD/20090512083746513%5Bl%5D.j

pg[/img]

Tips:

每创建一个菜单,请在其属性面板中设置Name属性,而且不要为中文,因此Name值

将是此菜单响应函数的函数名的一部分,带中文的函数名,总是不好吧。

本讲中,我们将添加新建(New)、打开(Open)、添加数据(AddData)、保存

(Save)、另存为(SaveAs)、退出(Exit)这些菜单,()内为相应的Name属

性值。

Tips:

你可以在属性面板中的Text属性中,把菜单名设置为中英文形式,如“打开Open”,

带下划线的0表示此项菜单的快捷键是字母0,设置方法是在相应字母前加上“&”

字符,如“打开&0pen”。但这种快捷键只在打开此下拉菜单时才有效,即当你单击

“文件”菜单弹出下拉菜单时,按下字母0就可以定位到“打开”菜单。

还有一种在程序运行时都有效的全局快捷键,可以在属性面板中的“ShortCutKeys”

中设置。

你还可以在属性面板中的Image属性中设置你喜欢的菜单图标。单击Image那行右

边的按钮,弹出如下菜单。选择“项目资源文件”,再单击导入就可以选择你的图标了。

选择黄源

资源上下文

O本地资源(L):

e,x(M,|।I港阵

◎项目资源文件9:

E导入①;…&

最终效果如下所示。

新建Newontrol

―/打开Open

地图制版

,一添加数据AddData

口ArcGISE

-一保存Save

-Name:i

-冉S

-另存为SaveAs

-触

-退出Exit

-

-!

-:…年

-

注意,在解决方案面板中,选中刚才添加的所有图标,在其属性面板中将生成操作设置

为“嵌入的资源”,这一点很重要!

2、实现相关菜单

首先定义指针(写在publicpartialclassForml:Form下面即可):

privateESRI.ArcGIS.Controls.IMapControl3mmapControl=null;

privateESRLArcGIS.Controls.IPageLayoutControl2mpageLayoutControl=null;

privateIMapDocumentpMapDocument;

若以上指针无效,请添加以卜.引用:

usingESRI.ArcGIS.Carto;

usingESRI.ArcGIS.Controls;

usingESRI.ArcGIS.esriSystem;

usingESRI.ArcGIS.Display;

usingESRI.ArcGIS.Geometry;

usingESRI.ArcGIS.SystemUI;

在设计视图中的属性面板中,选择Forml,即主窗体,单击事件按钮(闪电形状的那

个按钮),打到“Load”事件并双击,添加此事件。

在Forml_Load函数中初始化这些指针:

//取得MapControl和PageLayoutControl的引用

m_mapControl=(IMapControl3)this.axMapControll.Object;

m_pageLayoutControl=(IPageLayoutControl2)this.axPageLayoutControl1.Object;

依次双击每个菜单项,添加菜单响应函数。实现代码如下:

///<summary>

///新建地图命令

///</summary>

///<paramname二〃sender〃></param>

///<paramname=〃e〃></param>

privatevoidNew_Click(objectsender,EventArgse)

(

//本命令涉及到MapControl和PageLayoutControl同步问题,将在下一讲中实现

)

///<summary>

///打开地图文档Mxd命令

///</summary>

///<paramname二〃sender〃></param>

///<paramname=〃e〃X/param>

privatevoidOpen_Click(objectsender,EventArgse)

(

//本命令涉及到MapControl和PageLayoutControl同步问题,将在下一讲中实现

)

///<summary>

///添加数据命令

///</summary>

///<paramname二〃sender〃></param>

///<paramname=〃e〃></param>

privatevoidAddData_Click(objectsender,EventArgse)

(

intcurrentLayerCount=this.axMapControll.LayerCount;

ICommandpCommand=newControlsAddDataCommandClass();

pCommand.OnCreate(this.axMapControll.Object);

pCommand.OnClick();

)

///<summary>

///保存地图文档命令

///</summary>

///<paramname二〃sender〃></param>

///<paramname=〃e〃X/param>

privatevoidSave_Click(objectsender,EventArgse)

(

//首先确认当前地图文档是否有效

if(null!=m_pageLayoutControl.DocumentFilename&&

m_mapControl.CheckMxFile(m_pageLayoutControl.DocumentFilename))

(

//创建一个新的地图文档实例

IMapDocumentmapDoc=newMapDocumentClass();

//打开当前地图文档

mapDoc.Open(m_pageLayoutControl.DocumentFilename,string.Empty);

//用PageLayout中的文档替换当前文档中的PageLayout部分

mapDoc.ReplaceContents((IMxdContents)m_pageLayoutControl.PageLayout);

//保存地图文档

mapDoc.Save(mapDoc.UsesRelativePaths,false);

mapDoc.Close();

)

)

///<summary>

///另存为地图文档命令

///</summary>

///<paramname二〃sender〃></param>

///<paramname=〃e〃X/param>

privatevoidSaveAs_Click(objectsender,EventArgse)

//调用另存为命令

ICommandcommand=newControlsSaveAsDocCommandClassO;

command.OnCreate(m_controlsSynchronizer.ActiveControl);

command.OnClickO;

)

///<summary>

///退出程序

///</summary>

///<paramname二〃sender〃></param>

///<paramname=〃e〃X/param>

privatevoidExit_Click(objectsender,EventArgse)

(

Application.Exit();

3、编译运行

按F5编译运行程序。也许你会发现,菜单命令的实现方式都是类型的。没错,在AE9.2

中,内置了许多常用的Command和Tool,如ControlsAddDataCommandClass、

ControlsMapZoomlnToolClass、ControlsMapPanToolClass等等,这些内置对象在

ESRI.ArcGIS.Controls命名空间中,你可以对象浏览器中查看。而且这些内置对象的

调用方式都类似,如下所示:

//定义

ICommandcommand=newControlsSaveAsDocCommandClassO;

//创建

command.OnCreate(m_controlsSynchronizer.ActiveControl);

//调用

command.OnClickO;

第三讲MapControl与PageLayoutControl同步(一)

在ArcMap中,能够很方面地进行MapView和LayoutView两种视图的切换,而且二者

之间的数据是同步显示的。

关于两种视图同步的实现方法有多种,可以使用ObjectCopy对象进行数据硬拷贝,而

比较简单的方法莫过于二者共享一份地图了,这也是最常用的方法。

1、新建同步类ControlsSynchronizer

在解决方案面板中右击项目名,选择“添加I类”,在类别中选择“VisualC#项目项”,

在模板中选择“类”,输入类名"ControlsSynchronizer.cs”,将以下代码覆盖自动

生成的代码:

usingSystem;

usingSystem.Drawing;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Windows.Forms;

usingSystem.10;

usingSystem.Runtime.InteropServices;

usingESRI.ArcGIS.esriSystem;

usingESRI.ArcGIS.Carto;

usingESRI.ArcGIS.Controls;

usingESRI.ArcGIS.SystemUI;

namespace_sdnMap

(

///<summary>

///ThisclassisusedtosynchronizeagvenPageLayoutControlanda

MapControl.

///Wheninitialized,theusermustpassthereferenceofthesecontrolto

theclass,bind

///thecontroltogetherbycalling'BindControls'whichinturnsetsa

joinedMapreferenced

///bybothcontrol;andsetallthebuddycontrolsjoinedbetweenthese

twocontrols.

///WhenalternatingbetweentheMapControlandPageLayoutControl,you

shouldactivatethevisiblecontrol

///anddeactivatetheotherbycallingActivateXXX.

///Thiscalssislimitedtoasituationwherethecontrolsarenot

simultaneouslyvisible.

///</summary>

publicclassControlsSynchronizer

ftregionclassmembers

privateIMapControl3m_mapControl=null;

privateIPageLayoutControl2m_pageLayoutControl=null;

privateIToolm_mapActiveTool=null;

privateIToolm_pageLayoutActiveTool=null;

privateboolm_IsMapCtrlactive=true;

privateArrayListm_frameworkControls=null;

ttendregion

ftregionconstructor

///<summary>

///默认构造函数

///</summary>

publicControlsSynchronizer0

(

〃初始化ArrayList

m_frameworkControls=newArrayList();

)

///<summary>

///构造函数

///</summary>

///<paramname=//mapControl/zX/param>

///<paramname="pageLayoutControl〃X/param>

publicControlsSynchronizer(IMapControl3mapControl,

IPageLayoutControl2pageLayoutControl)

:this0

(

〃为类成员赋值

m_mapControl=mapControl;

m_pageLayoutControl=pageLayoutControl;

)

ttendregion

ftregionproperties

///<summary>

///取得或设置MapControl

///</summary>

publicIMapControl3MapControl

get{returnm_mapControl;}

set{m_mapControl=value;}

)

///<summary>

///取得或设置PageLayoutControl

///</summary>

publicIPageLayoutControl2PageLayoutControl

(

get{returnm_pageLayoutControl;}

set{m_pageLayoutControl=value;}

)

///<summary>

///取得当前ActiveView的类型

///</summary>

publicstringActiveViewType

(

get

(

if(m_IsMapCtrlactive)

return"MapControl”;

else

return"PageLayoutControl”;

)

)

///<summary>

///取得当前活动的Control

///</summary>

publicobjectActiveControl

(

get

(

if(m_mapControl==nullj|m_pageLayoutControl==null)

thrownew

Exception(''ControlsSynchronizer::ActiveControl:\r\nEitherMapControlor

PageLayoutControlarenotinitialized!;

if(m_IsMapCtrlactive)

returnm_mapControl.Object;

else

returnm_pageLayoutControl.Object;

}

)

ttendregion

ftregionMethods

///<summary>

///激活MapControl并解除thePagleLayoutControl

///</summary>

publicvoidActivateMapO

(

try

(

if(m_pageLayoutControl==nullj|m_mapControl==null)

thrownew

Exception(z,ControlsSynchronizer::ActivateMap:\r\nEitherMapControlor

PageLayoutControlarenotinitialized!,z);

〃缓存当前PageLayout的CurrentTool

if(m_pageLayoutControl,CurrentTool!=null)

m_pageLayoutActiveTool=m_pageLayoutControl.CurrentTool;

〃解除PagleLayout

m_pageLayoutControl.ActiveView.Deactivate();

〃激活MapControl

m_mapControl.ActiveView.Activate(m_mapControl.hWnd);

〃将之前MapControl最后使用的tool,作为活动的tool,赋给

MapControl的CurrentTool

if(m_mapActiveToo1!=null)m_mapControl.CurrentTool=

m_mapActiveTool;

m_IsMapCtr1active=true;

〃为每一个的frameworkcontrols,设置Buddycontrol为

MapControl

this.SetBuddies(m_mapControl.Object);

catch(Exceptionex)

thrownew

Exception(string.Format(,zControlsSynchronizer::ActivateMap:\r\n{0}z,,

ex.Message));

}

)

///<summary>

///激活PagleLayoutControl并减活MapCotrol

///</summary>

publicvoidActivatePageLayout()

(

try

(

if(m_pageLayoutControl==nullj|m_mapControl==null)

thrownew

Exception(/zControlsSynchronizer::ActivatePageLayout:\r\nEitherMapControlor

PageLayoutControlarenotinitialized!,z);

〃缓存当前MapControl的CurrentTool

if(m_mapControl.CurrentTool!=null)m_mapActiveTool=

m_mapControl.CurrentTool;

//解除MapControl

m_mapControl.ActiveView.Deactivate();

〃激活PageLayoutControl

m_pageLayoutControl.ActiveView.Activate(m_pageLayoutControl

.hWnd);

〃将之前PageLayoutControl最后使用的tool,作为活动的tool,

赋给PageLayoutControl的CurrentTool

if(m_pageLayoutActiveTool!=null)

m_pageLayoutControl.CurrentTool=m_pageLayoutActiveTool;

m_IsMapCtrlactive=false;

〃为每一个的frameworkcontrols,设置Buddycontrol为

PageLayoutControl

this.SetBuddies(m_pageLayoutControl.Object);

catch(Exceptionex)

thrownew

Exception(string.Format(,zControlsSynchronizer::ActivatePageLayout:\r\n{0}〃,

ex.Message));

}

)

///<summary>

///给予一个地图,置换PageLayoutControl和MapControl的focusmap

///</summary>

///<paramname=z'newMap,z></param>

publicvoidReplaceMap(IMapnewMap)

(

if(newMap==null)

thrownew

Exception(/zControlsSynchronizer::ReplaceMap:\r\nNewmapforreplacementis

notinitialized!〃);

if(m_pageLayoutControl==nullI|m_mapControl==null)

thrownew

Exception(^ControlsSynchronizer::ReplaceMap:\r\nEitherMapControlor

PageLayoutControlarenotinitialized!,z);

//createanewinstanceofIMapscollectionwhichisneededbythe

PageLayout

〃创建一个PageLayout需要用到的,新的IMapscollection的实例

IMapsmaps=newMaps();

//addthenewmaptotheMapscollection

〃把新的地图加到Mapscollection里头去

maps.Add(newMap);

boolblsMapActive=m_IsMapCtrlactive;

//callreplacemaponthePageLayoutinordertoreplacethefocus

map

//wemustcallActivatePageLayout,sinceitisthecontrolwecall

'ReplaceMaps)

〃调用PageLayout的replacemap来置换focusmap

〃我们必须调用ActivatePageLayout,因为它是那个我们可以调用

“ReplaceMaps”的Control

this.ActivatePageLayout();

m_pageLayoutContro1.PageLayout.ReplaceMaps(maps);

//assignthenewmaptotheMapControl

〃把新的地图赋给MapControl

m_mapControl.Map=newMap;

//resettheactivetools

〃重设activetools

m_pageLayoutActiveToo1=null;

m_mapActiveTool=null;

//makesurethatthelastactivecontrolisactivated

〃确认之前活动的control被激活

if(blsMapActive)

(

this.ActivateMapO;

m_mapControl.ActiveView.Refresh();

)

else

(

this.ActivatePageLayout();

m_pageLayoutControl.ActiveView.Refresh();

}

)

///<summary>

///bindtheMapControlandPageLayoutControltogetherbyassigninga

newjointfocusmap

///指定共同的Map来把MapControl和PageLayoutContro1绑在一起

///</summary>

///<paramname=z'mapControl,,></param>

///<paramname=,,pageLayoutContror,X/param>

///<paramname=,,activateMapFirst/,>trueiftheMapControlsupposedto

beactivatedfirst,如果MapControl被首先激活,则为true</param>

publicvoidBindControls(IMapControl3mapControl,IPageLayoutContro12

PageLayoutControl,boolactivateMapFirst)

(

if(mapControl==null||pageLayoutControl==null)

thrownew

Exception(/zControlsSynchronizer::BindControls:\r\nEitherMapControlor

PageLayoutControlarenotinitialized!;

m_mapControl=MapControl;

m_pageLayoutContro1=pageLayoutControl;

this.BindControls(activateMapFirst);

)

///<summary>

///bindtheMapControlandPageLayoutControltogetherbyassigninga

newjointfocusmap

///指定共同的Map来把MapControl和PageLayoutControl绑在一起

///</summary>

///<paramname二〃activateMapFirst〃>trueiftheMapControlsupposedto

beactivatedfirst,如果MapControl被首先激活,则为true</param>

publicvoidBindControls(boolactivateMapFirst)

(

if(m_pageLayoutControl==nullI|m_mapControl==null)

thrownew

Exception(/zControlsSynchronizer::BindControls:\r\nEitherMapControlor

PageLayoutControlarenotinitialized!,z);

//createanewinstanceofIMap

〃创造IMap的一个实例

IMapnewMap=newMapClass();

newMap.Name="Map";

//createanewinstanceofIMapscollectionwhichisneededbythe

PageLayout

〃创造一个新的IMapscollection的实例,这是PageLayout所需要的

IMapsmaps=newMaps();

//addthenewMapinstancetotheMapscollection

〃把新的Map实例赋给Mapscollection

maps.Add(newMap);

//callreplacemaponthePageLayoutinordertoreplacethefocus

map

〃调用PageLayout的replacemap来置换focusmap

m_pageLayoutControl.PageLayout.ReplaceMaps(maps);

//assignthenewmaptotheMapControl

〃把新的map赋给MapControl

m_mapControl.Map=newMap;

//resettheactivetools

〃重设activetools

m_pageLayoutActiveToo1=null;

m_mapActiveTool=null;

//makesurethatthelastactivecontrolisactivated

//确定最后活动的control被激活

if(activateMapFirst)

this.ActivateMapO;

else

this.ActivatePageLayout();

)

///<summary>

///bypassingtheapplication,stoolbarsandTOCtothesynchronization

class,itsavesyouthe

///managementofthebuddycontroleachtimetheactivecontrolchanges.

Thismethodadstheframework

///controltoanarray;oncetheactivecontrolchanges,theclass

iteratesthroughthearrayand

///callesSetBuddyControloneachofthestoredframeworkcontrol.

///</summary>

///<paramname="control〃X/param>

publicvoidAddFrameworkControl(objectcontrol)

(

if(control==null)

thrownew

Exception(/zControlsSynchronizer::AddFrameworkControl:\r\nAddedcontrolis

notinitialized!,z);

m_frameworkControls.Add(control);

)

///<summary>

///Removeaframeworkcontrolfromthemanagedlistofcontrols

///</summary>

///<paramname="control〃X/param>

publicvoidRemoveFrameworkControl(objectcontrol)

if(control==null)

thrownew

Exception(z,ControlsSynchronizer::RemoveFrameworkControl:\r\nControltobe

removedisnotinitialized!");

m_frameworkControls.Remove(control);

)

///<summary>

///Removeaframeworkcontrolfromthemanagedlistofcontrolsby

specifyingitsindexinthelist

///</summary>

///<paramname="index'X/param>

publicvoidRemoveFrameworkControlAt(intindex)

(

if(m_frameworkControls.Count<index)

thrownew

Exception(/zControlsSynchronizer::RemoveFrameworkControlAt:\r\nlndexisout

ofrange!〃);

m_frameworkControls.RemoveAt(index);

)

///<summary>

///whentheactivecontrolchanges,theclassiteratesthroughthe

arrayoftheframeworkcontrols

///andcallesSetBuddyControloneachofthecontrols.

///</summary>

///<paramname="buddy"〉theactivecontrol</param>

privatevoidSetBuddies(objectbuddy)

(

try

(

if(buddy==null)

thrownew

Exception(z/ControlsSynchronizer::SetBuddies:\r\nTargetBuddyControlisnot

initialized!z,);

foreach(objectobjinm_frameworkControIs)

if(objisIToolbarControl)

((IToolbarControl)obj).SetBuddyControl(buddy);

)

elseif(objisITOCControl)

(

((ITOCControl)obj).SetBuddyControl(buddy);

)

)

}

catch(Exceptionex)

(

thrownew

Exception(string.Format(''ControlsSynchronizer::SetBuddies:\r\n{0}〃,

ex.Message));

}

)

ttendregion

)

)

第三讲MapControl与PageLayoutControl同步(二)

2、新建Maps类

在同步类中,要用到Maps类,用于管理地图对象。与新建同步类ControlsSynchronizer

类似,我们新建一Maps类,其所有代码如下所示:

usingSystem;

usingSystem.Collections;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Runtime.InteropServices;

usingESRI.ArcGIS.Carto;

namespace„sdnMap

[Guid(〃f27d8789-fbbc-4801-be78-0e3cd8fff9d5〃)]

[Classinterface(ClassInterfaceType.None)]

[Progid(z,_sdnMap.Maps")]

publicclassMaps:IMaps,IDisposable

//classmember-usinginternallyanArrayListtomanagetheMaps

collection

privateArrayListm_array=null;

ftregionclassconstructor

publicMaps()

(

m_array=newArrayList0;

)

ftendregion

ftregionIDisposableMembers

///<summary>

///Disposethecollection

///</summary>

publicvoidDispose0

(

if(m_array!=null)

(

m_array.Clear();

m_array=null;

)

)

ftendregion

ttregionIMapsMembers

///<summary>

///RemovetheMapatthegivenindex

///</summary>

///<paramname="Index'X/param>

publicvoidRemoveAt(intIndex)

(

if(Index>m_array.Count||Index<0)

thrownewException(/zMaps::RemoveAt:\r\nlndexisoutof

range!〃);

m_array.RemoveAt(Index);

)

///<summary>

///ResettheMapsarray

///</summary>

publicvoidReset()

(

m_array.Clear();

)

///<summary>

///GetthenumberofMapsinthecollection

///</summary>

publicintCount

(

get

(

returnm_array.Count;

)

)

///<summary>

///ReturntheMapatthegivenindex

///</summary>

///<paramname="Index'X/param>

///<returns></returns>

publicIMapget_Item(intIndex)

(

if(Index>m_array.Count||Index<0)

thrownew

Exception("Maps:[img]editor/images/smilies/default/24.gif[/img]

returnm_array[Index]asIMap;

)

///<summary>

///RemovetheinstanceofthegivenMap

///</summary>

///<paramname="Map〃X/param>

publicvoidRemove(IMapMap)

m_array.Remove(Map);

)

///<summary>

///CreateanewMap,addittothecollectionandreturnittothecaller

///</summary>

///<returns></returns>

publicIMapCreate()

(

IMapnewMap=newMapClass();

m_array.Add(newMap);

returnnewMap;

)

///<summary>

///AddthegivenMaptothecollection

///</summary>

///<paramname=,,Mapz,></param>

publicvoidAdd(IMapMap)

(

if(Map==null)

thrownewExceptionC'Maps::Add:\r\nNewMapismot

initialized!z,);

m_array.Add(Map);

)

#endregion

)

)

3、新建打开文档类OpenNewMapDocument

由于从工具栏自带的打开按钮打开地图文档的时候,不会自动进行两种视图之间的同

步,所以我们要自己派生一个OpenNewMapDocument类,用于打开地图文档。

右击项目名,选择“添加|类”,再选择ArcGIS类别中的BaseCommand模板,输入类名

w

为OpenNewMapDocument.cso

首先添加引用:

usingSystem.Windows.Forms;

usingESRI.ArcGIS.Carto;

再添加如下成员变量:

privateControlsSynchronizerm_contro1sSynchronizer=null;

修改默认的构造函数如下所示:

〃添加参数

publicOpenNewMapDocument(ControlsSynchronizerControlsSynchronizer)

(

//

//TODO:Definevaluesforthepublicproperties

//

〃设定相关属性值

base.m_category="Generic";//localizabletext

base.m_caption=〃0pen〃;//localizabletext

base.m_message="Thisshouldworkin

ArcMap/MapControl/PageLayoutContror7;//localizabletext

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论