IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Afficher/masquer les contrôles dynamiquement [AC-2000]


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut Afficher/masquer les contrôles dynamiquement
    Bonjour.

    Voici une question pour laquelle j'ai trouvé maintes réponses.
    Mais si je la pose encore, c'est parce que je n'en ai pas trouvé de satisfaisante…

    Prenons un principe simple :

    Un formulaire n'affichant qu'un seul enregistrement à la fois, composé d'un champ [Participant(s)] qui peut prendre les valeurs suivantes :
    -Seul
    -Equipe

    Quand on sélectionne Seul, il faut remplir le champ [Nom du participant seul].
    Quand on sélectionne Equipe, il faut remplir les champs [Nom de l'Equipe] et [Nombre d'équipiers].

    Le but du jeu serrait de ne faire apparaître le contrôle [Nom du participant seul] que quand [Participant(s)] prend la valeur Seul et de ne faire apparaître les contrôles [Nom de l'Equipe] et [Nombre d'équipiers] que quand [Participant(s)] prend la valeur Equipe.

    Jusque là, pas trop de soucis, modifier la propriété visible des contrôles [Nom du participant seul], [Nom de l'Equipe] et [Nombre d'équipiers] sur un événement associé à clic ou sortie ou perte de focus du contrôle [Participant(s)].

    Mais l'ennui, pour ceux qui n'ont jamais eu ce problème, c'est que si cette fonction se déclenche à la saisie dans le champ [Participant(s)], les contrôles [Nom du participant seul], [Nom de l'Equipe] et [Nombre d'équipiers] restent à l'état de la dernière saisie, y compris lorsque l'on fait défiler les enregistrements…
    On peut donc voir des contrôles qui devraient êtres invisibles et ne pas en voir d'autres qui devraient être visibles…

    Les solutions idéales :
    - Trouver un événement qui se déclencherait chaque fois que le formulaire changerait d'enregistrement…
    Du type Curent, ou Activation, cet événement marche très bien.
    Mais pour une raison qui m'échappe, peut être dûe au fait que le formulaire en question est en fait un sous-formulaire d'une base sous le coup de l'intégrité référentielle, quand je fais défiler les enregistrements et que j'arrive au dernier (avec la roulette par exemple…) je peux continuer à faire défiler les enregistrements indéfiniment, sauf qu'en fait je rajoute des enregistrements vides à ma table.

    - Utiliser une mise en forme conditionnelle.
    Cela marche aussi très bien, mais ne permet pas de cacher les champs, seulement de les désactiver, ce qui ne me satisfait pas.
    La version VBA de la mise ne forme conditionnelle nécessite d'ailleurs, selon mon niveau de connaissance, un événement pour se déclencher…L serpent se mord la queue…

    Les demies-solutions :
    J'ai rattaché les fonctions visibles à la perte de focus du premier contrôle du formulaire.
    Ça fonctionne, à condition que je commence par cliquer sur ce champ avant de commencer le défilement et que si je clique sur un autre contrôle, je pense à re-cliquer sur le premier avant de recommencer un défilement.

    Les fausses bonnes solutions :
    - Bloquer l'usage de la roulette…
    - Utiliser un cadre et appliquer la mise en forme conditionnelle à ce cadre pour masquer le champ derrière…

    Alors comme je pense que je ne suis pas le seul à m'être posé cette question, mais que les réponses que j'ai pu lire se trouvent pratiquement toutes listées ci-dessus, je me permets de tenter ma chance…

    D'avance merci.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Solution possible : tricher avec la mise en forme conditionnelle en mettant ton texte en blanc sur blanc. J'ai déjà fait un truc de ce genre avec un sous formulaire en mode continu avec Access 2002 et cela a très bien fonctionné.

    L'activation des champs était géré par l'événement Current du sous-form.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour et merci pour la rapidité de réponse.

    Citation Envoyé par marot_r Voir le message
    Solution possible : tricher avec la mise en forme conditionnelle en mettant ton texte en blanc sur blanc. J'ai déjà fait un truc de ce genre avec un sous formulaire en mode continu avec Access 2002 et cela a très bien fonctionné.
    J'ai l'habitude de présenter les champs à compléter en "gravé".
    Le simple fait d'en changer le fond et la couleur de texte est certes graphiquement performant (je m'en sers pour des champs verrouillés..), mais insuffisant.
    Le champ est toujours visible, l'index tabulation peut encore lui donner le focus, on peut en modifier le contenu avec le risque de ne pas pouvoir le lire et de ne pas s'en apercevoir…

    Bref, ça n'est pas parfait…

    Citation Envoyé par marot_r Voir le message
    L'activation des champs était géré par l'événement Current du sous-form.

    A+
    Malheureusement, comme indiqué plus haut, j'ai déjà eu recours à cette méthode, mais cette dernière me mets la panique dans les ajouts d'enregistrements.

    J'avais bien pensé verrouiller cette fonction du formulaire, mais c'est trop la pagaille pour ajouter quand j'ai réellement besoin d'ajouter un enregistrement.

    Je souhaiterais essayer autre chose et reste ouvert à d'autre propositions…

    La mise en forme conditionnelle avec le choix de désactiver les champs serait une demie-solution, car ces derniers restent visibles et cette base étant destinée à des utilisateurs non-chevronnés, ces derniers seraient tentés de s'inquiéter de ces champs "cassés"…

    D'ailleurs, voici peut-être une piste :
    Je sais que l'on peut rédiger en code la mise en forme conditionnelle, du moins toutes les fonctions autorisées dans l'assistant.

    Mais sur quel événement se déclencherait-elle.

    Dans mon formulaire à problèmes, j'ai une mise en forme conditionnelle qui fonctionne impeccable et ne cause aucun problème.

    Si je devait la saisir en code, il faudrait que je la rattache à un évènement. Mais ça ne serait pas Current qui semble poser problèmes…

    Quel est l'événement auquel est rattaché la mise en forme conditionnelle qui selon mes déductions n'est pas current puisque la Mise en forme conditionnelle marche sans poser de problèmes ?

    PS : La mise en forme conditionnelle n'est pas disponible pour des objets comme les lignes, les cadres, les boutons, ou des groupes d'options ce qui est très pénalisant dans mon cas...

    Encore merci.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    Je me permet de relancer cette question, car même si je penses avoir argumenté sur le fait que la solution proposée ne semblait pas pouvoir être adapté à l'usage que je souhaitait en faire, je reste ouvert à d'autre propositions.

    Encore merci.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    J'ai finalement trouvé la clé du problème.

    Dans une de mes procédure masquant ou faisant apparaître un contrôle, une ligne avait pour but de vider le contenu du contrôle masqué.

    La problème, c'est que lors du défilement et lors du déclenchement de Current, le contenu devenu vide du contrôle vidé était pris en compte par Access qui comptabilisé cette opération et permettait d'ajouter un enregistrement ou pleins avec la roulette.

    J'ai déplacé cette ligne de code et j'ai pu récupérer le fonctionnement correct de Curent.

    Les fonction de visible/invisible y sont maintenant associées.

    Et le défilement fiat maintenant apparaître dynamiquement les contrôles en fonction du contenu d'un autre.

    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher/Masquer les colonnes d'un tableau
    Par snheed dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 22/10/2009, 12h20
  2. Réponses: 3
    Dernier message: 05/02/2009, 13h23
  3. Réponses: 2
    Dernier message: 31/01/2008, 15h48
  4. Réponses: 2
    Dernier message: 29/05/2006, 08h32
  5. Réponses: 5
    Dernier message: 13/10/2005, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo