Comment «prévisualisez-vous» les actions des utilisateurs, telles que le redimensionnement ou l'édition dans GoDiagrams?
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?
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();
}
}