Aller au contenu

DwgBecameCurrent - probleme de document courant


Messages recommandés

Bonjour,

 

Je me prends le chou depuis ce matin avec des plantages à répétition.

J'essaie d'écrire une fonction qui affiche dans une palette perso une arborescence pour gérer les présentations.

Le problème se pose au changement de dessin en cours.

J'ai ajouté un réacteur du genre : _parent.DwgBecameCurrent += new DocumentCollectionEventHandler(_parent_DwgBecameCurrent);

Dans ma fonction de retour, j'ai un comportement un peu bizarre (ou en tout cas surprenant pour moi).

Dans la fonction de retour, je reçois une variable e : void _parent_DwgBecameCurrent(object sender,DocumentCollectionEventArgs e)

En fait je passe 3 fois dans cette fonction et au 1er passage le document renvoyé par e.Document est mon ancien document alors que AcadApp.DocumentManager.MdiActiveDocument me renvoie le nouveau document (que je viens de rendre courant).

 

Est-ce normal?

 

Je m'en suis sorti, mais j'ai perdu pas mal de temps avec ça et j'aimerais comprendre si j'ai fait une bêtise quelque part.

Je n'aime pas rester sur une solution qui fonctionne mais que je ne maîtrise (comprends) pas.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je préfère utiliser DocumentActivated qui n'est lancé qu'une fois quand on passe d'un document ouvert à un autre mais deux fois quand on ouvre un nouveau document.

On peut facilement éviter de gérer l'évènement deux fois en comparant e.Document avec le document précédemment actif.

 

        // champ privé
       Document acdoc;

       // constructeur
       public LayoutsTab()
       {
           var docMgr = Application.DocumentManager;
           acdoc = docMgr.MdiActiveDocument;
           docMgr.DocumentActivated += OnDocumentActivated;
           Layouts = GetLayoutNames(acdoc.Database);
       }

       // gestionnaire d'évènement
       private void OnDocumentActivated(object sender, DocumentCollectionEventArgs e)
       {
           if (e.Document != null && e.Document != acdoc)
           {
               acdoc = e.Document;
               Layouts = GetLayoutNames(acdoc.Database);
           }
       }

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité