¿Cómo se puede obtener una “vista previa” de las acciones del usuario, como cambiar el tamaño o editar en GoDiagrams?

StackOverflow https://stackoverflow.com/questions/111744

  •  02-07-2019
  •  | 
  •  

Pregunta

  • El modelo de objetos GoDiagram tiene un GoDocument.
  • GoViews tiene una referencia a un GoDocument.
  • Si el usuario realiza alguna modificación en la superficie de diagramación, se genera un evento GoDocument.Changed con la información relevante en los argumentos del evento.

Me gustaría recibir una notificación cuando ocurran algunas acciones del usuario, para poder consultar con mi Controlador (no permitirlo o cancelarlo si es necesario) y luego emitir órdenes de visualización y actualización desde allí que realmente modifiquen el Diagrama de Northwoods componente de terceros.
El evento Cambiado es una notificación de que algo acaba de suceder (tiempo pasado). Hacer todo lo anterior en el controlador de eventos da como resultado un...(espera por ello)...StackOverflowException.(GoDocument.Changed handler > Actualizaciones de GoDocument > Activando nuevos eventos modificados...)

Entonces, ¿cómo obtengo un modelo de notificación del tipo BeforeEditing o BeforeResizing en GoDiagrams?¿Alguien que haya estado allí ha vivido para contarlo?

¿Fue útil?

Solución

JFYI...La recomendación del proveedor de componentes es subclasificar y anular los métodos apropiados para esto.Anule el método bool CanXXX() y genere un evento personalizado cancelable.Si el suscriptor devuelve falso, rescata (devolver falso para cancelar la acción del usuario) de CanXXX.No hay ningún mecanismo incorporado para esto en GoDiagrams.

Por ejemplo, puede definir un evento CustomView.Bjectresinging Cancelable.En su anulación de GooolResizing.canStart, puede plantear ese evento.Si la propiedad CancelEventargs.Cancel se vuelve verdadera, tendrá que CANTART () devuelve falso.

Fuente http://www.nwoods.com/forum/forum_posts.asp?TID=2745

Otros consejos

Los argumentos del evento (GoChangedEventArgs) para el evento de cambio tienen una propiedad IsBeforeChanging que indica si el evento de cambio se generó desde el método "RaiseChanging" (verdadero) o RaiseChanged (falso).Eso debería indicarle si el cambio ya se ha producido, pero no conozco ninguna forma de cancelarlo.

Lo mejor que puedo sugerir es que en lugar de verificar si el cambio está permitido y realizarlo, verifique si el cambio está permitido. no permitido, y si no lo está, llame al método "Deshacer" en los argumentos en el evento de cambio.Básicamente:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top