Aller au contenu

gestion d\'Evenements


PhilOctet

Messages recommandés

Bonjour,

 

Toujours dans le cadre de la création de mon outil de nettoyage de mes dessins AutoCAD, j'ai créé un évênement lors de la fermeture d'un dessin.

 

1/ Extrait de MyPlugin.vb

Public Class MyPlugin

Implements IExtensionApplication

 

Public Sub Initialize() Implements IExtensionApplication.Initialize

 

' Initialize your plug-in application here

 

Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose

 

End Sub

 

Public Sub Terminate() Implements IExtensionApplication.Terminate

' Do plug-in application clean up here

 

End Sub

 

End Class

 

2/ Extrait de Module1.vb

Public Sub docBeginDocClose(ByVal senderObj As Object, ByVal docBegClsEvtArgs As DocumentBeginCloseEventArgs)

 

System.Windows.MessageBox.Show("Au revoir ...")

 

End Sub

 

Mais voilà, cela ne fonctionne qu'une seule fois.

 

J'ai bien chargé la dll via la commande NetLoad qui normalement ne se décharge que lors de la fermeture complète d'AutoCAD.

 

J'ouvre plusieurs dessins soit avec sdi =1 (les uns après les autres) ou avec sdi = 0 (tous ensembles).

 

Cela ne fonctionne qu'une seule fois pour le premier dessin.

 

Qu'est ce que je ne fais pas ? ou qu'est ce que je fais mal ?

 

J'attire l'attention sur le fait que je travaille en VB.Net.

 

Je vous remercie par avance pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut,

 

Je n'avais pas vu passer le message...

 

J'ai du mal à lire le VB, mais je crois comprendre d'où vient le problème.

 

acDoc pointe sur le document avtif et seul ce document est abonné à l'évènement :

AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose

 

Si tu veux que ça fonctionne sur tous les documents qui seront ouvert après l'ouverture d'AutoCAD, il faut abonner le DocumentManager à un évènement DocumentCreated et c'est la méthode de réaction à cet évènement qui abonnera chaque nouveau document à ton évènement.

Si ton application n'est pas chargée au démarrage, il faut aussi, dans la méthode Initialize, abonner tous les documents déjà ouverts.

 

Voilà ce que ça donnerait en C#

public class MyPlugin : IExtensionApplication
{
   private DocumentCollection docMan = Application.DocumentManager;

   // Abonnement du DocumentManager à l'évènement "DocumentCreated"
   // Abonnement de tous les documents déjà ouverts à l'évènement "BeginDocumentClose"
   public void Initialize()
   {
       docMan.DocumentCreated += new DocumentCollectionEventHandler(OnDocumentCreated);
       foreach (Document doc in docMan)
       {
           doc.BeginDocumentClose += new DocumentBeginCloseEventHandler(docBeginDocClose);
       }
   }

   public void Terminate() { }

   // Réaction à l'ouverture d'un document => abonnement à l'évènement "BeginDocumentClose"
   private void OnDocumentCreated(object sender, DocumentCollectionEventArgs e)
   {
       e.Document.BeginDocumentClose += new DocumentBeginCloseEventHandler(docBeginDocClose);
   }

   // Réaction à l'évènement "BeginDocumentClose" 
   private void docBeginDocClose(object sender, DocumentBeginCloseEventArgs e)
   {
       Application.ShowAlertDialog("Au revoir ...");
   }
}

 

et une traduction automatique (pas testé) en VB

 

Public Class MyPlugin
   Implements IExtensionApplication
   Private docMan As DocumentCollection = Application.DocumentManager
   
   ' Abonnement du DocumentManager à l'évènement "DocumentCreated"
   ' Abonnement de tous les documents déjà ouverts à l'évènement "BeginDocumentClose"
   Public Sub Initialize()
       AddHandler docMan.DocumentCreated, AddressOf OnDocumentCreated
       For Each doc As Document In docMan
           AddHandler doc.BeginDocumentClose, AddressOf docBeginDocClose
       Next
   End Sub
   
   Public Sub Terminate()
   End Sub
   
   ' Réaction à l'ouverture d'un document => abonnement à l'évènement "BeginDocumentClose"
   Private Sub OnDocumentCreated(ByVal sender As Object, ByVal e As DocumentCollectionEventArgs)
       AddHandler e.Document.BeginDocumentClose, AddressOf docBeginDocClose
   End Sub
   
   ' Réaction à l'évènement "BeginDocumentClose" 
   Private Sub docBeginDocClose(ByVal sender As Object, ByVal e As DocumentBeginCloseEventArgs)
       Application.ShowAlertDialog("Au revoir ...")
   End Sub
End Class

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é