Engine撤销画点画线

IFeatureLayer pFeatlayer = bf.GetLayerByName(axMapControl,str_Drawing);
IFeatureClass pFeatCls = pFeatlayer.FeatureClass;
IFeatureClassWrite fr = (IFeatureClassWrite)pFeatCls;
m_EngineEditor.EditSessionMode = esriEngineEditSessionMode.esriEngineEditSessionModeNonVersioned;
m_EngineEditor.StartEditing((pFeatCls as IDataset).Workspace,axMapControl.Map);
((IEngineEditLayers)m_EngineEditor).SetTargetLayer(pFeatlayer, 0);
//m_EngineEditor.StartOperation();
IFeature f;//定义一个IFeature实例,用于添加到当前图层上
ESRI.ArcGIS.Geometry.IPoint p;//定义一个点,用来作为IFeature实例的形状属性,即shape属性
//下面是设置点的坐标和参考系
p = new ESRI.ArcGIS.Geometry.PointClass();
p.SpatialReference = axMapControl1.SpatialReference;
p.X = e.mapX;
p.Y = e.mapY;
//将IPoint设置为IFeature的shape属性时,需要通过中间接口IGeometry转换
ESRI.ArcGIS.Geometry.IGeometry peo;
peo = p;
f = pFeatCls.CreateFeature();//实例化IFeature对象, 这样IFeature对象就具有当前图层上要素的字段信息
f.Shape = peo;//设置IFeature对象的形状属性
//f.set_Value(3, "house1");//设置IFeature对象的索引是3的字段值
f.Store();//保存IFeature对象
fr.WriteFeature(f);//将IFeature对象,添加到当前图层上
axMapControl1.Refresh();//刷新地图
注:以上代码是在图层中添加一个点要素

IEngineEditProperties ep = new EngineEditorClass();
ILayer m_pCurrentLayer = ep.TargetLayer;
if (m_pCurrentLayer == null) return;
IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;
IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;
if (pDataset == null) return;
IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
bool bHasUndos = false;
pWorkspaceEdit.HasUndos(ref bHasUndos);
if (bHasUndos)
pWorkspaceEdit.UndoEditOperation();
axMapControl1.ActiveView.Refresh();
注:以上代码是撤销刚刚在图层里添加的一个点要素
问题:pWorkspaceEdit.HasUndos(ref bHasUndos)获取不到可以撤销的HasUndos状态,HasUndos始终为false
已邀请:

朱新颖

赞同来自: 凯_820

需要使用IEngineEditor.StartOperation先开启编辑操作,才可以进行Undo操作。 

why小飞

赞同来自:

我开启编辑操作了,可是Hasundos还是为false

要回复问题请先登录注册