Comment «prévisualisez-vous» les actions des utilisateurs, telles que le redimensionnement ou l'édition dans GoDiagrams?

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

  •  02-07-2019
  •  | 
  •  

Question

  • Le modèle d'objet GoDiagram a un GoDocument.
  • Les GoViews font référence à un GoDocument.
  • Si l'utilisateur modifie la surface de la représentation, un événement GoDocument.Changed est déclenché avec les informations appropriées dans les arguments de l'événement.

Je souhaite être averti lorsque des actions utilisateur se produisent, afin de pouvoir discuter avec mon contrôleur (interdire / annuler si nécessaire), puis émettre des ordres de mise à jour de la vue à partir de là, qui modifient réellement les Northwoods. Composant tiers GoDiagram .
L'événement modifié est une notification signalant que quelque chose vient de se passer (au passé): si vous effectuez toutes les opérations ci-dessus dans le gestionnaire d'événements, une exception .... ( attendez-le ) ... StackOverflowException. (Gestionnaire GoDocument.Changed > Mises à jour GoDocument > Activation de nouveaux événements modifiés ..)

Alors, comment puis-je obtenir un type de modèle de notification BeforeEditing ou BeforeResizing dans GoDiagrams? Quelqu'un qui y est allé a-t-il vécu pour raconter une histoire?

Était-ce utile?

La solution

JFYI ... La recommandation composant-fournisseur est de sous-classer et de remplacer les méthodes appropriées pour cela. Remplacez la méthode bool CanXXX (), déclenchez un événement personnalisé annulable. Si l'abonné retourne la valeur false, libérez du secours ( renvoyer false pour annuler l'action de l'utilisateur ) de CanXXX. Aucun mécanisme intégré à cela dans GoDiagrams.

  

Par exemple, vous pouvez définir un   CustomView.ObjectResizing annulable   un événement. Dans votre écrasement de   GoToolResizing.CanStart, vous pouvez élever   cet événement. Si la   Propriété CancelEventArgs.Cancel   devient vrai, vous auriez   CanStart () renvoie false.

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

Autres conseils

Les arguments d'événement (GoChangedEventArgs) de l'événement change ont une propriété IsBeforeChanging qui indique si l'événement change a été déclenché à partir de l'option "RaiseChanging". méthode (true) ou RaiseChanged (false). Cela devrait vous dire si le changement a déjà eu lieu, mais je ne connais aucun moyen de l'annuler.

Le mieux que je puisse suggérer, au lieu de vérifier si le changement est autorisé et de le mettre en œuvre, vérifie si le changement n'est pas autorisé et, dans le cas contraire, appelle le bouton "Annuler". méthode sur les arguments dans l'événement change. Donc, essentiellement:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top