




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
«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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储服务费合同标准文本例子
- 个人融资顾问聘用合同标准文本
- 三人合作建厂协议合同标准文本
- 入户门窗合同标准文本
- 产权调换协议合同标准文本
- 健身房运营合同样本
- 企业物业托管合同样本
- 上海职工劳务合同范例
- 住宿用餐结算合同样本
- skf轴承采购合同标准文本
- 2022-2023年棉花行业洞察报告PPT
- 精神科症状学演示课件
- 文学类文本聂志红《在那桃花盛开的地方》阅读练习与答案
- DB13T 5080-2019 SBS改性沥青生产过程动态质量监控规范
- 义务教育物理课程标准(2022年版word版)
- 2.抗美援朝课件(共25张PPT)
- 《CSS样式表的使用》教学设计
- 外环长安大道、东方大道段天然气管道工程管道试压吹扫方案资料(共13页)
- 中国花鸟画简史-共60页PPT课件
- 第四章_复合材料的界面
- 纺织染整助剂
评论
0/150
提交评论