ArcGIS Engine(4)

2020-02-21 18:22

throw new Exception(\

m_array.RemoveAt(Index); }

///

/// Reset the Maps array ///

public void Reset() {

m_array.Clear(); }

///

/// Get the number of Maps in the collection ///

public int Count {

get {

return m_array.Count; } }

///

/// Return the Map at the given index ///

///

public IMap get_Item(int Index) {

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

throw new Exception(\

return m_array[Index] as IMap; }

///

/// Remove the instance of the given Map ///

///

m_array.Remove(Map); }

///

/// Create a new Map, add it to the collection and return it to the caller ///

/// public IMap Create() {

IMap newMap = new MapClass(); m_array.Add(newMap);

return newMap; }

///

/// Add the given Map to the collection ///

///

if (Map == null)

throw new Exception(\

m_array.Add(Map); }

#endregion } }

3、新建打开文档类OpenNewMapDocument

由于从工具栏自带的打开按钮打开地图文档的时候,不会自动进行两种视图之间的同步,所以我们要自己派生一个OpenNewMapDocument类,用于打开地图文档。 右击项目名,选择“添加|类”,再选择ArcGIS类别中的BaseCommand模板,输入类名为“OpenNewMapDocument.cs”。 首先添加引用:

using System.Windows.Forms; using ESRI.ArcGIS.Carto; 再添加如下成员变量:

private ControlsSynchronizer m_controlsSynchronizer = null; 修改默认的构造函数如下所示:

//添加参数

public OpenNewMapDocument(ControlsSynchronizer controlsSynchronizer) {

//

// TODO: Define values for the public properties // //设定相关属性值

base.m_category = \ base.m_caption = \ //localizable text

base.m_message = \ //localizable text base.m_toolTip = \ //localizable text

base.m_name = \ //unique id, non-localizable (e.g. \

//初始化m_controlsSynchronizer

m_controlsSynchronizer = controlsSynchronizer; try {

//

// TODO: change bitmap name if necessary //

string bitmapResourceName = GetType().Name + \

base.m_bitmap = new Bitmap(GetType(), bitmapResourceName); }

catch (Exception ex) {

System.Diagnostics.Trace.WriteLine(ex.Message, \ } }

再在OnClick函数中添加如下代码:

public override void OnClick() {

// TODO: Add OpenNewMapDocument.OnClick implementation OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = \ dlg.Multiselect = false;

dlg.Title = \

if (dlg.ShowDialog() == DialogResult.OK) {

string docName = dlg.FileName;

IMapDocument mapDoc = new MapDocumentClass();

if (mapDoc.get_IsPresent(docName) && !mapDoc.get_IsPasswordProtected(docName)) {

mapDoc.Open(docName, string.Empty); IMap map = mapDoc.get_Map(0);

m_controlsSynchronizer.ReplaceMap(map);

mapDoc.Close(); } } }

在添加类时,模板会自动添加一个名为“OpenNewMapDocument.bmp”的图标,你可以自己修改或者替换为打开的文件夹的图标。

4、两种视图的同步

在3sdnMap.cs中添加成员变量,即同步类对象:

private ControlsSynchronizer m_controlsSynchronizer = null;

在Form1_Load函数中进行初始化工作:

//初始化controls synchronization calss m_controlsSynchronizer = new

ControlsSynchronizer(m_mapControl, m_pageLayoutControl);

//把MapControl和PageLayoutControl绑定起来(两个都指向同一个Map),然后设置MapControl为活动的Control m_controlsSynchronizer.BindControls(true);

//为了在切换MapControl和PageLayoutControl视图同步,要添加Framework Control m_controlsSynchronizer.AddFrameworkControl(axToolbarControl1.Object); m_controlsSynchronizer.AddFrameworkControl(this.axTOCControl1.Object);

// 添加打开命令按钮到工具条

OpenNewMapDocument openMapDoc = new OpenNewMapDocument(m_controlsSynchronizer);

axToolbarControl1.AddItem(openMapDoc, -1, 0, false, -1, esriCommandStyles.esriCommandStyleIconOnly);

因为我们自动派生了打开文档类,并自己将其添加到工具条,所以我们就不需要工具条原来的“打开”按钮了,可以ToolbarControl的属性中将其删除。 下面,我们可完成上一讲遗留的功能了。

///

/// 新建地图命令 ///

///

private void New_Click(object sender, EventArgs e) {

//询问是否保存当前地图

DialogResult res = MessageBox.Show(\是否保存当前地图?\\提示\MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (res == DialogResult.Yes) {

//如果要保存,调用另存为对话框

ICommand command = new ControlsSaveAsDocCommandClass(); if (m_mapControl != null)

command.OnCreate(m_controlsSynchronizer.MapControl.Object); else

command.OnCreate(m_controlsSynchronizer.PageLayoutControl.Object); command.OnClick(); }

//创建新的地图实例

IMap map = new MapClass(); map.Name = \

m_controlsSynchronizer.MapControl.DocumentFilename = string.Empty; //更新新建地图实例的共享地图文档 m_controlsSynchronizer.ReplaceMap(map); }

///

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

///

private void Open_Click(object sender, EventArgs e) {

if (this.axMapControl1.LayerCount > 0) {

DialogResult result = MessageBox.Show(\是否保存当前地图?\警告\ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (result == DialogResult.Cancel) return;

if (result == DialogResult.Yes) this.Save_Click(null, null); }

OpenNewMapDocument openMapDoc = new OpenNewMapDocument(m_controlsSynchronizer);

openMapDoc.OnCreate(m_controlsSynchronizer.MapControl.Object); openMapDoc.OnClick(); }

在添加数据AddData时,我们也要进行地图共享,故在AddData_Click函数后面添加如下代码:

IMap pMap = this.axMapControl1.Map;

this.m_controlsSynchronizer.ReplaceMap(pMap);

在另存为地图文档时,有可能会丢失数据,因此我们需要提示用户以确认操作,故需修改SaveAs_Click函数,如下所示:

///

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

///

private void SaveAs_Click(object sender, EventArgs e) {

//如果当前视图为MapControl时,提示用户另存为操作将丢失PageLayoutControl中的设置 if (m_controlsSynchronizer.ActiveControl is IMapControl3) {

if (MessageBox.Show(\另存为地图文档将丢失制版视图的设置\\r\\n您要继续吗?\\提示\MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;


ArcGIS Engine(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:审计案例分析及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: