ACC2000 : Envoi d'événements de formulaire ou d'état vers des modules de classes personnalisées

Traductions disponibles Traductions disponibles
Numéro d'article: 234907 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F234907
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Résumé

Niveau avancé : les explications de ces articles requièrent d'excellentes connaissances en programmation, interopérabilité et gestion multi-utilisateurs.

Cet article s'applique à une base de données Microsoft Access (.mdb) et à un projet Microsoft Access (.adp).

Les objets des classes formulaire et état de Microsoft Access définissent un ensemble d'événements qui permettent d'utiliser des procédures événementielles pour automatiser les tâches. En utilisant le mot clé AvecÉvénements, Visual Basic pour applications vous permet de suivre les événements qui se produisent dans un module de classe et de les propager vers un autre module de classe. C'est ce que l'on appelle les " récepteurs d'événements ".

Cet article explique comment envoyer des événements de formulaire ou d'état vers un module de classes personnalisées.

Plus d'informations

Il est possible d'écrire des procédures événementielles dans un module de classe d'un formulaire ou d'un état. Cependant, les procédures événementielles pour les formulaires et les états étant propres au module de classe d'un objet, elles ne sont pas accessibles à partir d'autres objets Microsoft Access. Les développeurs ont donc plus de difficultés à écrire un code réutilisable. Imaginons que vous souhaitiez implémenter une routine de gestion d'erreur qui fonctionne quand un événement d'erreur de formulaire est déclenché. Si vous voulez exécuter la même routine à partir de tous les événements d'erreur de formulaire, vous pouvez écrire une sous-routine ou une fonction globale que vous appellerez à partir de l'événement d'erreur de chaque formulaire.

Cependant, vous pouvez aussi transférer chaque événement d'erreur de formulaire vers un module de classe personnalisée. L'avantage de cette méthode est qu'elle permet au développeur d'implémenter une approche plus axée sur l'objet plutôt que d'avoir à appeler une fonction globale à partir de l'événement approprié de chaque formulaire ou état. Si le développeur vise d'autres développeurs de Visual Basic pour Applications, cette approche lui permet de leur exposer la routine d'une manière qui leur est familière.

Ci-dessous, trois étapes principales que vous devez effectuer pour réussir à transférer un événement de formulaire ou d'état vers un module de classes personnalisées.

Étape 1 : Création d'un module de classes personnalisées qui consigne les événements

Lors de la création de votre module de classes personnalisées, il y a plusieurs choses que vous devez faire. Vous devez utiliser le mot clé AvecÉvénements pour définir une variable objet du type de l'objet dont vous voulez suivre les événements. Par exemple, si vous souhaitez suivre les événements d'un objet de formulaire Access, vous devez déclarer votre variable objet comme indiqué ci-dessous :
 Private WithEvents frm As Access.Form
Cette variable objet permet à votre classe personnalisée de faire deux choses. Tout d'abord, avec l'utilisation des procédures de propriétés, vous disposez d'un mécanisme pour identifier l'objet particulier que cette instance de classe va suivre. Ensuite, cela vous permet de créer des procédures événementielles dans la classe personnalisée qui est attachée aux événements définis pour ce type d'objet dans le modèle d'objet Access.

Une fois que vous avez créé la variable objet, vous devez créer des procédures de propriétés en vous servant des déclarations Obtenir propriétés et Définir propriétés, qui vous permettent de définir et de retourner le même type d'objet comme la variable objet. Cette opération est indispensable si vous souhaitez appeler ce code à partir de plusieurs objets. Supposons que votre classe personnalisée soit en train de suivre des événements de formulaires. Puisque vous avez la possibilité de pouvoir suivre les événements des formulaires Clients et Employés, le code doit identifier le formulaire spécifique que cette instance de classe va suivre. L'utilisation des procédures de propriétés vous permet de passer le formulaire dans la classe en tant que propriété de façon à l'identifier.

Enfin, vous devez écrire les procédures événementielles dans le module de classe personnalisée pour automatiser les tâches souhaitées chaque fois que l'événement se propage vers le module de classe. Lorsque vous utilisez le mot clé AvecÉvénement, les procédures événementielles pour le type d'objet que vous avez spécifié sont disponibles sur le module de classe. Par exemple, si vous utilisez AvecÉvénements pour déclarer votre variable objet en tant qu'objet Formulaire Access, alors toutes les procédures événementielles définies pour l'objet Formulaire Access peuvent être écrites dans votre module de classe personnalisée.

Étape 2 : Instanciation de la classe personnalisée et identification de l'objet à suivre

Une fois que vous avez créé votre module de classe personnalisée et que vous avez ajouté les procédures de propriétés nécessaires et les procédures événementielles, vous devez instancier la classe et la passer à l'objet dont vous voulez suivre les événements. Pour instancier un module de classe personnalisée, vous devez déclarer une variable objet en tant que nom de votre classe personnalisée. Vous devez ensuite utiliser l'instruction Définir pour en créer une instance. Puis, vous devez définir la propriété définie par les procédures de propriétés dans le module de classe sur l'objet à suivre.
 'Declarations section of module
 Option Compare Database
 Option Explicit

 'Ce code suppose que vous avez créé une classe personnalisée nommée
 ' cFormErrorHandler qui expose une propriété nommée Formulaire. Vous utilisez
 'la propriété Formulaire de la classe personnalisée pour la passer au
 'formulaire dont vous souhaitez transmettre les événements. Consultez l'exemple
 'étape par étape ci-dessous pour avoir un exemple complet.
 Private clsFormError As cFormErrorHandler

 Private Sub Form_Open(Cancel As Integer)
     Set clsFormError = New cFormErrorHandler
     Set clsFormError.Form = Me
 End Sub

Étape 3 : Définition des propriétés événementielles sur [Procédure événementielle]

Pour que Microsoft Access puisse transférer des événements pour un objet, toutes les propriétés événementielles concernant les événements que vous souhaitez transmettre doivent être définies sur [Procédure événementielle] en mode Création pour le formulaire ou l'état. Vous n'avez pas besoin d'ajouter le code actuel pour la procédure événementielle dans le module de formulaire ou d'état. Cependant, la propriété événementielle en mode Création doit être définie sur [Procédure événementielle].

REMARQUE : Si vous ajoutez la procédure événementielle derrière le module de formulaire ou d'état ainsi qu'à la classe personnalisée, cela déclenche les deux procédures événementielles. La procédure événementielle définie dans le module de formulaire ou d'état est déclenchée en premier, suivie par la procédure événementielle dans votre classe personnalisée.

Exemple étape par étape

Les étapes suivantes montrent comment transmettre un événement de formulaire à un module de classe personnalisée. Même s'il est possible de transmettre d'autres événements de formulaire, cet exemple concerne surtout l'événement d'erreur de formulaire.

Microsoft fournit des exemples de programmation à titre indicatif uniquement, sans garantie explicite ou implicite, y compris, sans que cela soit exhaustif, les garanties de qualité marchande et/ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familier avec le langage de programmation et les outils utilisés pour créer et déboguer des procédures. Les techniciens du support technique de Microsoft peuvent expliquer la fonctionnalité d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctions supplémentaires ni ne créeront de procédures pour répondre à vos besoins spécifiques. Si votre expérience en matière de programmation est limitée, vous pouvez contacter un fournisseur de solutions agréé par Microsoft ou appeler la ligne de consultation Microsoft payante au (800) 936-5200. Pour plus d'informations sur les fournisseurs de solutions agréés par Microsoft, visitez le site Web à l'adresse suivante :

http://www.microsoft.com/mcsp/
Pour plus d'informations sur les options de support technique Microsoft, visitez le site Web à l'adresse suivante :

http://support.microsoft.com/contactus/?ws=support
ATTENTION : si vous suivez les étapes de cet exemple, la base de données d'exemples Les Comptoirs.mdb va être modifiée. Sauvegardez le fichier Les Comptoirs.mdb et effectuez ces étapes sur une copie de la base de données.

  1. Ouvrez la base de données exemple Les Comptoirs.mdb.
  2. Dans le menu Insertion, cliquez sur Module de classe pour lancer l'environnement Visual Basic et créer un nouveau module de classe personnalisée.
  3. Ajoutez le code suivant au module de classe :
     Option Compare Database
     Option Explicit
    
     'Définit la variable objet du type d'objet dont vous souhaitez
     'suivre les événements. Reportez-vous à l'Étape 1 de la section " Plus
      d'informations ".
     Private WithEvents frm As Access.Form
    
     'Définit les procédures de propriétés pour que vous puissiez identifier
     le formulaire particulier qui sera utilisé par chaque instance de la classe.
     'Reportez-vous à l'Étape 1 de la section " Plus d'informations ".
     Public Property Get Form() As Access.Form
         Set Form = frm
     End Property
    
     Public Property Set Form(frmIn As Access.Form)
         Set frm = frmIn
     End Property
     'Définit la procédure événementielle que vous souhaitez transmettre. Notez
     'que c'est la même définition qui est utilisée pour la procédure événementielle
      d'erreur dans un module de formulaire.
     Private Sub frm_Error(DataErr As Integer, Response As Integer)
         MsgBox "My custom error message!"
         Response = acDataErrContinue
     End Sub
  4. Enregistrez le module de classe sous cFormErrorHandler.
  5. Ouvrez le formulaire Employés en mode Création.
  6. Ajoutez le code suivant au module de classe du formulaire :
     'Declarations section of module.
     Option Compare Database
     Option Explicit
    
     Private clsFormError As cFormErrorHandler
    
     Private Sub Form_Open(Cancel As Integer)
         Set clsFormError = New cFormErrorHandler
         Set clsFormError.Form = Me
     End Sub
  7. En mode Création du formulaire, définissez la propriété SurErreur du formulaire sur [Procédure événementielle]. Notez qu'il n'est pas nécessaire d'ajouter une procédure événementielle SurErreur au module de formulaire. Il vous suffit de définir la propriété SurErreur sur [Procédure événementielle].

    REMARQUE : Si vous ajoutez un code de procédure événementielle au formulaire même, alors le code défini dans ce formulaire est exécuté, suivi du code de la classe personnalisée.
  8. Enregistrez le formulaire puis fermez-le.
  9. Ouvrez le formulaire en mode Formulaire.
  10. Dans le menu Edition, cliquez sur Supprimer un enregistrement. Cela entraîne une erreur car l'enregistrement de l'employé que vous essayez de supprimer a des enregistrements liés dans la table Commandes.
Notez que vous avez reçu le message d'erreur personnalisé que vous avez défini dans la procédure événementielle Erreur_Formulaire dans le module de classe personnalisée. Cela indique que l'événement Erreur de formulaire s'est propagé vers le module de classe personnalisée, même si vous n'avez pas défini une procédure événementielle Erreur_Formulaire directement dans le formulaire.

Propriétés

Numéro d'article: 234907 - Dernière mise à jour: dimanche 2 février 2014 - Version: 2.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 2000 Standard Edition
Mots-clés : 
kbnosurvey kbarchive kbdta KB234907
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com