描述
一個mxd裏面包含了圖層以及做好的版式,在開發時對模板進行了操作,保存的時候發現只有把mapcontrol保存了,PageLayoutControl裏面沒有保存,找了好久找不到原因。後來找到原因很無語。先上源代碼
public void SaveProject()
{
try
{
string docPath = Hook.CurrentProject.Documentpath;
string m_mapDocumentName = Hook.M_MapControl.DocumentFilename;
//分爲保存和另存爲
if (!string.IsNullOrEmpty(m_mapDocumentName))//保存
{
//execute Save Document command
if (Hook.M_MapControl.CheckMxFile(m_mapDocumentName))
{
//create a new instance of a MapDocument
IMapDocument mapDoc = new MapDocumentClass();
mapDoc.Open(m_mapDocumentName, string.Empty);
//Make sure that the MapDocument is not readonly
if (mapDoc.get_IsReadOnly(m_mapDocumentName))
{
Hook.MainWindow.Invoke(new Action(() =>
{
Msg.Show("地圖是隻讀的不能保存");
}));
mapDoc.Close();
return;
}
else
{
try
{
RenderTools.CopyAndOverwriteMap();//這個是講mapcontrol裏面的內容拷貝到pagelayoutcontrol裏面的
Hook.MapTabControl.SelectedTabPageIndex = 1;
mapDoc.ReplaceContents((IMxdContents)Hook.M_PageControl.PageLayout);
mapDoc.ReplaceContents((IMxdContents)((MapControl)(Hook.M_MapControl.Object)).Map);
mapDoc.Save(true, true);
mapDoc.Close();
Hook.MapTabControl.SelectedTabPageIndex = 0;
Hook.CurrentProject.isSave = true;
}
catch (Exception ex)
{
}
}
}
}
else
{
ESRI.ArcGIS.SystemUI.ICommand cmd = new ESRI.ArcGIS.Controls.ControlsSaveAsDocCommand();
cmd.OnCreate(Hook.M_MapControl.Object);
cmd.OnClick();
}
}
catch (Exception ex)
{
Logger.Log.Write("地圖文檔保存失敗" + ex.Message);
}
}
public static void CopyAndOverwriteMap()
{
IObjectCopy objectCopy = new ObjectCopyClass();//複製接口
object toCopyMap = Hook.M_MapControl.Map;//數據視圖中的地圖
object copiedMap = objectCopy.Copy(toCopyMap);//複製地圖到緩存中
object toOverwriteMap = Hook.M_PageControl.ActiveView.FocusMap;//版面地圖數據
Hook.M_PageControl.DocumentFilename = Hook.M_MapControl.DocumentFilename;
objectCopy.Overwrite(copiedMap, ref toOverwriteMap);
Hook.M_PageControl.ActiveView.Refresh();
Hook.M_PageControl.ActiveView.Extent = Hook.M_PageControl.ActiveView.FullExtent;
}
發現問題
pagelayoutCOntrol裏面的東西沒了
解決辦法:
先替換mapcontrol,再替換pagelayoutcontrol
mapDoc.ReplaceContents((IMxdContents)((MapControl)(Hook.M_MapControl.Object)).Map);
mapDoc.ReplaceContents((IMxdContents)Hook.M_PageControl.PageLayout);
後記
奇葩