我在输入类型和使用正确的接口时遇到问题。我有一个函数循环所有具有特定属性集的文本元素。一旦找到匹配项,我希望能够选择此文本元素或使其处于活动状态或突出显示或地图上的任何内容。代码如下。
protected override void OnClick(Item item)
{
IMxDocument pDoc = ValidateInterface.GetMxDocument();
IActiveView pLayout = (IActiveView)pDoc.PageLayout;
IGraphicsContainer pGraphicsCont = (IGraphicsContainer)pDoc.PageLayout;
pGraphicsCont.Reset();
IElementProperties _ElemProps = null;
while ((_ElemProps = (IElementProperties)pGraphicsCont.Next()) != null)
{
if (_ElemProps.CustomProperty is IPropertySet2)
{
ITextElement _textElement = (ITextElement)_ElemProps;
IPropertySet2 _propertySet = (IPropertySet2)_ElemProps.CustomProperty;
MessageBox.Show("Before I compare item to string");
if (item.Caption == Convert.ToString(_propertySet.GetProperty(NAME_STRING)))
{
//Problems start here
MessageBox.Show("Inside the IF statement");
IGraphicsContainerSelect _SelectMyElement = null; // = (IGraphicsContainerSelect)pGraphicsCont;
ITextElement _newTextElement = (ITextElement)pGraphicsCont;
IElement TestElement = _newTextElement as IElement;
_SelectMyElement.SelectElement(TestElement);
}
}
}
}
我的地图上没有选择任何内容。我在地图上循环遍历每个图形元素(IGraphicContainer)。找到匹配后,我想选择该图形元素。我正在尝试使用IGraphicContainerSelect来做到这一点。它需要一个IElement变量类型作为参数,这就是为什么我要尝试强制转换它。但同样,注意到正在被选中。这一切都发生在我点击按钮时。
对此的任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:0)
尝试刷新地图。 我认为使用pLayout.PartialRefresh或pScreenDisplay.Invalidate方法的更好方法。
pLayout.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection,null,pLayout.Extent)
OR
IScreenDisplay pScreenDisplay = pLayout.ScreenDisplay;
pScreenDisplay.Invalidate(null,false,esriViewGraphicSelection);
pScreenDisplay.UpdateWindow();
请参阅帮助:http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//000100000242000000