5 votos

¿Cómo puedo crear un ArcGIS universal ' herramienta actual ' propiedad?

Tengo una base de la herramienta de la clase que maneja el 90% de mi lógica personalizada, pero algunas de las herramientas que es necesario establecer a sí mismos como la herramienta actual. Las operaciones entre ArcEngine del IToolbarControl y ArcDesktop del IApplication interfaz son diferentes.

Con ArcDesktop, necesito tener una referencia de ESRI.ArcGIS.Marco, que no está disponible en un puro ArcEngine de implementación.

Hay alguna forma de configurar la Herramienta Actual de la propiedad, sin necesidad de una referencia a ESRI.ArcGIS.Marco?

Como nota lateral: Alguna manera de conseguir el ArcDesktop del identificador de ventana sin tener que recurrir a la API de Win32?

4voto

Nathan Bedford Puntos 3157

Si usted trabaja en .NET, usted puede tomar ventaja de su mecanismo de carga de ensamblados.

En pocas palabras, una asamblea que es la que normalmente se carga en memoria cuando uno de sus tipos es la primera vez que accede. Un tipo es la primera vez que accede cuando un método que contiene una referencia a que el tipo empieza a ejecutarse.

Esto significa que usted puede tener su referencia de ensamblado de ESRI.ArcGIS.Marco de interoperabilidad de la asamblea, incluso en el más puro ArcEngine medio ambiente - como cualquiera de los métodos que trabajan con esta asamblea no ejecute nunca. Si no nunca comenzar a ejecutar, el CLR no intente cargar la dependencia.

Esto está bien definido el comportamiento, lo que significa que puede confiar en él sin tener que preocuparse de que va a cambiar entre CLR de prensa.

Si todavía no es adecuado para su situación, hay otras cosas que usted podría hacer, como definir una sencilla interfaz para la configuración de la herramienta actual y el uso de algún tipo de inyección de dependencia/inversión de control. Tendrías otro de los dos conjuntos, cada uno de ellos podría implementar la interfaz de una manera diferente y por lo tanto tiene su propio conjunto de dependencias de ensamblado. La clave es inyectar el comportamiento apropiado, que se suele hacer a través de la configuración, pero algunos contenedores IoC también puede hacer que en tiempo de ejecución.

1voto

denny Puntos 1071

Suponiendo que tienes un control de mapa en su aplicación, se puede usar el. CurrentTool propiedades para configurarlo. ¿Es lo que buscas o lo interprete mal la pregunta?

AxMapControl mapControl;
mapControl.CurrentTool = (ITool) SomeCommand;

1voto

Paul Puntos 555

En aplicaciones de escritorio, IApplication.hWnd de AppRef te da el identificador de ventana.

1voto

saint_groceon Puntos 2696

Si quieres escribir herramientas que funcionan en el escritorio y el motor, entonces usted puede (intentar) se utiliza la clase HookHelper. Me olvide los detalles, pero funcionó en problemas con esta unos años atrás. Terminé de rodar mi propia inversión del control (como se describe por @Petr).

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