1 votos

Selección de un elemento gráfico al hacer clic en un botón mediante IGraphicContainerSelect

Estoy teniendo problemas con la fundición de tipo y el uso de las interfaces correctas. Tengo una función que recorre todos los elementos de texto con una propiedad específica. Una vez que se encuentra una coincidencia, quiero ser capaz de seleccionar este elemento de texto o hacer que sea activo o resaltado o lo que sea en el mapa. El código es el siguiente.

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);
                    }
                }
            }
}

Sin embargo, no se selecciona nada en mi mapa. Estoy recorriendo cada elemento gráfico (IGraphicContainer) en el mapa. Una vez que encuentro una coincidencia, quiero seleccionar ese elemento gráfico. Estoy tratando de utilizar IGraphicContainerSelect para hacer esto. Toma un tipo de variable IElement como parámetro, por lo que estoy tratando de lanzarlo. Pero de nuevo, no se está seleccionando. Todo esto sucede cuando hago clic en un botón.

1voto

tgmdbm Puntos 1115

En primer lugar, no puedes asignar null a _SelectMyElement y luego utilizarlo. Esto causará una excepción más tarde. En segundo lugar pGraphicsCont no implementa ITextElement.

Debe descomentar su asignación de _SelectMyElement y seleccionar _textElement. También es posible que tenga que refrescar la pantalla.

    if (item.Caption == Convert.ToString(_propertySet.GetProperty(NAME_STRING)))
                        {
                            //Problems start here
                            MessageBox.Show("Inside the IF statement");
                            IGraphicsContainerSelect _SelectMyElement =(IGraphicsContainerSelect)pGraphicsCont;

                            _SelectMyElement.SelectElement((IElement)_textElement);
                            pLayout.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGraphicSelection, null, null);
                        }

Después del SelectElement puedes añadir una comprobación de cuántos objetos están seleccionados para fines de depuración. Si tienes elementos seleccionados pero no se muestran en el mapa, intenta refrescar otra fase de dibujo o toda la vista activa.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X