我们都知道,在ArcMap中,有DataView和LayoutView两种视图,基本上相当于Engine中的MapControl以及PageLayoutControl,在ArcMap中在这两种视图中的元素(Element)是不属于一种体系的,可以通过如下操作进行验证:
1:切换到DataView,添加一个元素(例如在Insert菜单下,选择Text添加一个TextElement),再切换到LayoutView视图下,使用Select Element工具(黑色箭头,也就是默认的工具),无法选中该Element
2:切换到LayoutView,添加一个元素(例如在Insert菜单下,选择Text添加一个TextElement),再切换到DataView视图下,发现该元素不再显示。
所以得到结论,两个视图下,添加的Element是添加到了不同的地方。
在Engine下也是一个道理,拿这样一个MXD文件为例,该文件在ArcMap的DataView和LayoutView两个视图下分别添加了一个TextElement(假设DataView下添加的Element名为DE,LayoutView下添加的Element名为LE),那么:
1:用Engine中的MapControl载入该MXD文件,发现只能看到DE,LE无法看到,可以用如下的代码取到该DE,但无法取到LE:
IGraphicsContainer pGraphicsContainer2 = (IGraphicsContainer)this.axMapControl1.Map.BasicGraphicsLayer; pGraphicsContainer2.Reset(); IElement tmpElement = pGraphicsContainer2.Next();
2:用Engine中的PageLayoutControl载入该MXD文件,发现两个Element均可以看到,但使用默认的SelectElement工具无法选中DE,可以使用如下代码取到LE:
IGraphicsContainer pGraphicsContainer = (IGraphicsContainer)axPageLayoutControl1.PageLayout; pGraphicsContainer.Reset(); IElement tmpEle = null; while ((tmpEle = pGraphicsContainer.Next()) != null) { if (tmpEle is ITextElement ) { } }
可以用如下代码取到DE:
IGraphicsContainer pGraphicsContainer2 = (IGraphicsContainer)axPageLayoutControl1.ActiveView.FocusMap.BasicGraphicsLayer; pGraphicsContainer2.Reset(); IElement tmpElement = pGraphicsContainer2.Next();