Come si "visualizzano in anteprima" le azioni dell'utente come il ridimensionamento o la modifica in GoDiagrams?

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

  •  02-07-2019
  •  | 
  •  

Domanda

  • Il modello a oggetti GoDiagram ha un GoDocument.
  • GoViews ha un riferimento a un GoDocument.
  • Se l'utente esegue delle modifiche sulla superficie del diagramma, viene generato un evento GoDocument.Changed con le informazioni pertinenti negli argomenti dell'evento.

Vorrei essere avvisato quando si verificano alcune azioni dell'utente, in modo da poter conferire con il mio controller (non consentire / annullare se necessario) e quindi emettere ordini di aggiornamento vista da lì che modificano effettivamente il Northwoods GoDiagram componente di terze parti.
L'evento Changed è una notifica che qualcosa è appena accaduto (passato) - Facendo tutto quanto sopra nel gestore dell'evento si ottiene un .... ( aspetta ) ... StackOverflowException. (GoDocument.Changed handler > Aggiornamenti GoDocument > Firing new Changed events ..)

Quindi domanda, come posso ottenere un tipo di modello di notifica BeforeEditing o BeforeResizing in GoDiagrams? Qualcuno che è stato lì è vissuto per raccontare una storia?

È stato utile?

Soluzione

JFYI ... La raccomandazione del fornitore del componente è di sottoclassare e sovrascrivere i metodi appropriati per questo. Sovrascrivi il metodo boXX CanXXX (), genera un evento personalizzato annullabile. Se l'abbonato restituisce false, salva ( restituisci false per interrompere l'azione dell'utente ) di CanXXX. Nessun meccanismo incorporato per questo in GoDiagrams.

  

Ad esempio, è possibile definire a   CustomView.ObjectResizing annullabile   evento. Nel tuo override di   GoToolResizing.CanStart, puoi rilanciare   quell'evento. Se la   Proprietà CancelEventArgs.Cancel   diventa vero, avresti   CanStart () restituisce false.

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

Altri suggerimenti

Gli argomenti dell'evento (GoChangedEventArgs) per l'evento change ha una proprietà IsBeforeChanging che indica se l'evento change è stato generato da " RaiseChanging " metodo (true) o RaiseChanged (false). Ciò dovrebbe dirti se la modifica è ancora avvenuta, ma non so come annullarla.

Il meglio che posso suggerire è invece di verificare se la modifica è consentita ed eseguirla, verificare se la modifica è non consentita e se non è chiamata " Annulla " metodo sugli argomenti nell'evento change. Quindi essenzialmente:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top