本人也是一名二次开发的菜鸟级孩子,经过一个月的挑灯夜战终于搞定了一个小系统,过程中遇到很多小问题,特此将详细代码发帖,希望对后面的小菜鸟们有帮助,系统视频演示地址:http://v.youku.com/v_show/id_XNjE4NzM4MzI0.html
首先是新建工程,然后新建第一个Windows窗体Form1.下面是Form1.cs的源代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.GeoDatabaseExtensions;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.Analyst3D;
using ESRI.ArcGIS.DataSourcesGDB;
using MapAndPageLayoutSynchApp;
namespace GoodMap
{
public partial class Form1 : Form
{
#region class private members
private bool flag;
private string strTitle;
private Font strFont;
private Color strColor;
private MapSurround m_MapSurround;
private MapLoad m_MapLoad;
private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = null;
private ESRI.ArcGIS.Controls.IPageLayoutControl2 m_pageLayoutControl = null;
private ControlsSynchronizer m_controlsSynchronizer = null;
#endregion
public ILayer pMoveLayer;//需要被调整的图层;
public int toIndex;//将要调整到的目标图层的索引;
public ILayer pselectLayer;
//当前点移动反馈对象
IMovePointFeedback m_MovePointFeedback = new MovePointFeedbackClass();
//当前线移动反馈对象
IMoveLineFeedback m_MoveLineFeedback = new MoveLineFeedbackClass();
//当前面移动反馈对象
IMovePolygonFeedback m_MovePolygonFeedback = new MovePolygonFeedbackClass();
private esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemNone;
private IBasicMap pBasicMap = null;
public ILayer p_Layer=null;
System.Object unk = null;
System.Object data = null;
public bool frmAttriQueryisOpen = false; //用于按属性查询
public bool frmLocationisOpen = false; //用于按位置查询
public bool frmQuickFindisOpen = false; //用于快速查找
#region class constructor
public Form1()
{
InitializeComponent();
m_MapSurround=new MapSurround();
m_MapLoad = new MapLoad();
m_mapControl = (IMapControl3)this.axMapControl1.Object;
m_pageLayoutControl = (IPageLayoutControl2)this.axPageLayoutControl1.Object;
//初始化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);
}
#endregion
public string StrTitle
{
get
{ return strTitle; }
set
{ strTitle = value; }
}
public Font StrFont
{
get
{ return strFont;}
set
{ strFont = value; }
}
public Color StrColor
{
get
{ return strColor; }
set
{strColor = value; }
}
private void Form1_Load(object sender, EventArgs e)
{
axTOCControl2.SetBuddyControl(axMapControl1);
flag = false;
}
#region 基础操作
//新建地图文档
private void OpenDoc_Click(object sender, EventArgs e)
{
try
{
m_MapLoad.OperateMapDoc(axMapControl1, axMapControl2, "NewDoc");
axPageLayoutControl1.Refresh();
}
catch(Exception)
{
MessageBox.Show("新建地图无效!");
}
}
//打开地图文档
private void opensxdmap_Click(object sender, EventArgs e)
{
try
{
m_MapLoad.OperateMapDoc(axMapControl1, axMapControl2, "OpenDoc");
//loadMapDocument();
// MessageBox.Show("保存地图成功!");
}
catch(Exception)
{
MessageBox.Show("打开地图失败!");
}
}
//保存地图文档
private void SaveSXDDoc_Click(object sender, EventArgs e)
{
try
{
m_MapLoad.OperateMapDoc(axMapControl1, axMapControl2, "SaveDoc");
// MessageBox.Show("保存地图成功!");
}
catch (Exception)
{
MessageBox.Show("保存地图失败!");
}
}
//另存地图文档
private void SaveAs_Click(object sender, EventArgs e)
{
try
{
m_MapLoad.OperateMapDoc(axMapControl1, axMapControl2, "SaveDocAs");
}
catch (Exception)
{
MessageBox.Show("另存地图失败!");
}
}
//添加XYZ数据
private void AddXYZ_Click(object sender, EventA